@@ -51,7 +51,372 @@ Maven项目规范骨架
5151![ 发布可运行项目到生产环境] ( https://raw.githubusercontent.com/lyy289065406/mojo-archetype/master/doc/%E6%95%88%E6%9E%9C%E6%88%AA%E5%9B%BE/04-%E5%8F%91%E5%B8%83%E9%A1%B9%E7%9B%AE.png )
5252
5353
54+ ## 补充:通过本骨架所生成项目的pom.xml文件
5455
56+ ``` xml
57+ <?xml version =" 1.0" encoding =" UTF-8" ?>
58+ <project xmlns =" http://maven.apache.org/POM/4.0.0" xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
59+ xsi : schemaLocation =" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
60+ <modelVersion >4.0.0</modelVersion >
61+
62+ <!-- 项目基本信息(必填)-->
63+ <groupId >exp.libs</groupId >
64+ <artifactId >demo-archetype</artifactId >
65+ <version >1.0-SNAPSHOT</version >
66+ <packaging >jar</packaging >
67+
68+ <name >项目名称(可选)</name >
69+ <description >项目描述(可选)</description >
70+ <url >项目SVN路径(可选)</url >
71+ <inceptionYear >工程的初始时间(可选)</inceptionYear >
72+
73+ <!-- 项目的问题管理系统(可选)-->
74+ <issueManagement >
75+ <system >EXPLIBS-API-ONLINE</system >
76+ <url >https://lyy289065406.github.io/api-online/</url >
77+ </issueManagement >
78+
79+ <!-- 项目的问题追踪系统(可选)-->
80+ <ciManagement >
81+ <system >jenkins</system >
82+ <url >http://127.0.0.1:8080/jenkins/</url >
83+ </ciManagement >
84+
85+ <!-- 软件配置管理 -->
86+ <scm >
87+ <!-- 项目SVN主干目录(需保证目录已存在) -->
88+ <connection >scm:svn:http://127.0.0.1:81/svn/release/???/trunk</connection >
89+ <developerConnection >scm:svn:http://127.0.0.1:81/svn/release/???/trunk</developerConnection >
90+ <url >scm:svn:http://127.0.0.1:81/svn/release/???/trunk</url >
91+ </scm >
92+
93+ <!-- 变量定义 -->
94+ <properties >
95+ <project .build.sourceEncoding>UTF-8</project .build.sourceEncoding>
96+ <release .dir>${project.build.directory}/${project.artifactId}-${project.version}</release .dir>
97+ <jdk .version>1.6</jdk .version>
98+ <explibs .version>1.0-SNAPSHOT</explibs .version>
99+ <mrp .plugin.version>1.0-SNAPSHOT</mrp .plugin.version>
100+ </properties >
101+
102+ <!-- 项目依赖 -->
103+ <dependencies >
104+
105+ <!-- 经验库 -->
106+ <dependency >
107+ <groupId >exp.libs</groupId >
108+ <artifactId >exp-libs</artifactId >
109+ <version >${explibs.version}</version >
110+ </dependency >
111+
112+ <!-- 单元测试 -->
113+ <dependency >
114+ <groupId >junit</groupId >
115+ <artifactId >junit</artifactId >
116+ <version >4.8.2</version >
117+ <scope >test</scope >
118+ </dependency >
119+
120+ </dependencies >
121+
122+ <!-- 项目构建 -->
123+ <build >
124+ <plugins >
125+
126+ <!-- 指定项目JDK版本 -->
127+ <plugin >
128+ <groupId >org.apache.maven.plugins</groupId >
129+ <artifactId >maven-compiler-plugin</artifactId >
130+ <configuration >
131+ <source >${jdk.version}</source >
132+ <target >${jdk.version}</target >
133+ </configuration >
134+ </plugin >
135+
136+ <!-- 版本打包插件,在dos跳转到项目根目录,依次执行(需保证没有引用快照、本地与SVN服务器内容完全一致):
137+ 1 发布基线到svn: mvn release:prepare
138+ 2 发布引用到私服 : mvn release:perform -->
139+ <plugin >
140+ <groupId >org.apache.maven.plugins</groupId >
141+ <artifactId >maven-release-plugin</artifactId >
142+ <version >2.3.2</version >
143+ <configuration >
144+ <!-- 项目的SVN基线目录(需保证目录已存在) -->
145+ <tagBase >http://127.0.0.1:81/svn/release/???/tags</tagBase >
146+ </configuration >
147+ </plugin >
148+
149+ <!-- 测试插件 -->
150+ <plugin >
151+ <groupId >org.apache.maven.plugins</groupId >
152+ <artifactId >maven-surefire-plugin</artifactId >
153+ <version >2.7.2</version >
154+ <configuration >
155+ <!-- 解决控制台输出乱码问题 -->
156+ <forkMode >once</forkMode >
157+ <argLine >-Dfile.encoding=UTF-8</argLine >
158+ <systemProperties >
159+ <property >
160+ <name >net.sourceforge.cobertura.datafile</name >
161+ <value >target/cobertura/cobertura.ser</value >
162+ </property >
163+ </systemProperties >
164+ <!-- 项目打包时是否跳过d单元测试 -->
165+ <skipTests >true</skipTests >
166+ </configuration >
167+ </plugin >
168+
169+ <!-- 混淆打包插件 -->
170+ <plugin >
171+ <groupId >com.github.wvengen</groupId >
172+ <artifactId >proguard-maven-plugin</artifactId >
173+ <version >2.0.7</version >
174+ <executions >
175+ <execution >
176+ <phase >package</phase > <!-- 触发混淆打包的maven周期 -->
177+ <goals >
178+ <goal >proguard</goal >
179+ </goals >
180+ </execution >
181+ </executions >
182+ <configuration >
183+ <!-- attach 的作用是在 install/deploy 时, 将生成的 pg 文件也安装/部署 -->
184+ <attach >false</attach >
185+ <attachArtifactClassifier >pg</attachArtifactClassifier >
186+
187+ <!-- 指定混淆处理所需要的库文件 -->
188+ <libs >
189+ <lib >${java.home}/lib/rt.jar</lib > <!-- 运行时库rt是必须的 -->
190+ </libs >
191+
192+ <!-- 指定要做混淆处理的 应用程序jar、war、ear,或目录 -->
193+ <injar ></injar >
194+
195+ <!-- 指定混淆处理完后要输出的jar、war、ear,及其目录名称 -->
196+ <outjar >${project.build.finalName}-pg</outjar >
197+
198+ <!-- 混淆规则: 详细配置方式参考 ProGuard 官方文档 -->
199+ <options >
200+ <option >-ignorewarnings</option > <!-- 忽略混淆警告 -->
201+ <!-- option>-dontobfuscate</option --> <!-- 不混淆输入的类文件 -->
202+ <option >-dontshrink</option > <!-- 不压缩输入的类文件 -->
203+ <option >-dontoptimize</option > <!-- 不做代码优化 -->
204+ <option >-dontskipnonpubliclibraryclasses</option > <!-- 不跳过私有依赖的类库 -->
205+ <option >-dontskipnonpubliclibraryclassmembers</option > <!-- 不跳过私有依赖的类库成员 -->
206+ <!-- option>-overloadaggressively</option --> <!-- 混淆时应用侵入式重载 -->
207+ <!-- option>-obfuscationdictionary {filename}</option --> <!-- 使用给定文件中的关键字作为要混淆方法的名称 -->
208+ <!-- option>-applymapping {filename}</option --> <!-- 重用映射增加混淆 -->
209+ <!-- option>-useuniqueclassmembernames</option --> <!-- 确定统一的混淆类的成员名称来增加混淆 -->
210+ <!-- option>-dontusemixedcaseclassnames</option --> <!-- 混淆时不会产生形形色色的类名 -->
211+ <!-- option>-renamesourcefileattribute {string}</option --> <!-- 设置源文件中给定的字符串常量 -->
212+ <!-- option>-flattenpackagehierarchy {package_name}</option --> <!-- 重新包装所有重命名的包并放在给定的单一包中 -->
213+ <!-- option>-repackageclass {package_name}</option --> <!-- 重新包装所有重命名的类文件中放在给定的单一包中 -->
214+
215+
216+ <!-- 平行包结构(重构包层次),所有混淆的代码放在 pg 包下 -->
217+ <!-- 最好不要随便放, 若有多个项目混淆,不同jar的混淆类可能重名 -->
218+ <!-- 建议为{project.root.package}.pg (不存在此变量,此处仅为了说明) -->
219+ <option >-repackageclasses exp.libs.pojo.pg</option >
220+
221+ <!-- 保留[源码] --><!-- 按实际项目切换 -->
222+ <!-- option>-keepattributes SourceFile</option -->
223+
224+ <!-- 保留[行号] --><!-- 按实际项目切换 -->
225+ <option >-keepattributes LineNumberTable</option >
226+
227+ <!-- 保留[注释] --><!-- 按实际项目切换 -->
228+ <!-- option>-keepattributes *Annotation*</option -->
229+
230+ <!-- 保留[注解] --><!-- 按实际项目切换 -->
231+ <!-- option>-keepattributes Signature</option -->
232+
233+ <!-- 保持[入口类]不变 -->
234+ <!-- 按实际项目修正 -->
235+ <option >-keep class
236+ exp.libs.pojo.Version,
237+ exp.libs.pojo.Main
238+ </option >
239+
240+ <!-- 保持[Bean类]不变(若框架对 Bean中的内容做了反射处理,则必须保持不变) -->
241+ <!-- 按实际项目修正 -->
242+ <option >-keep class exp.libs.pojo.bean.** { *;}</option >
243+
244+ <!-- 保持[所有入口方法]不变 -->
245+ <!-- 固定不变 -->
246+ <option >-keepclasseswithmembers public class * {
247+ public static void main(java.lang.String[]);
248+ }
249+ </option >
250+
251+ <!-- 保持[对外API的类名和方法名]不变 -->
252+ <!-- 按实际项目修正 -->
253+ <option >-keep class exp.libs.pojo.api.** { *;}</option >
254+
255+ <!-- 保持[所有本地化方法]不变 -->
256+ <!-- 固定不变 -->
257+ <option >-keepclasseswithmembernames class * {
258+ native < methods> ;
259+ }
260+ </option >
261+
262+ <!-- 保持[所有类成员变量]不变 -->
263+ <!-- 按实际项目修正 -->
264+ <!-- option>-keepclassmembers class * {
265+ <fields>;
266+ }
267+ </option -->
268+
269+ <!-- 保持[所有枚举类必须的方法]不变 -->
270+ <!-- 固定不变 -->
271+ <option >-keepclassmembers class * extends java.lang.Enum {
272+ public static **[] values();
273+ public static ** valueOf(java.lang.String);
274+ }
275+ </option >
276+
277+ <!-- 保持[所有序列化接口]不变(若项目中不使用序列化,也可注释) -->
278+ <!-- 固定不变 -->
279+ <option >-keepclassmembers class * implements java.io.Serializable {
280+ static final long serialVersionUID;
281+ static final java.io.ObjectStreamField[] serialPersistentFields;
282+ private void writeObject(java.io.ObjectOutputStream);
283+ private void readObject(java.io.ObjectInputStream);
284+ java.lang.Object writeReplace();
285+ java.lang.Object readResolve();
286+ }
287+ </option >
288+ </options >
289+ </configuration >
290+ </plugin >
291+
292+ <!-- Ant插件:项目部署文件复制 -->
293+ <plugin >
294+ <groupId >org.apache.maven.plugins</groupId >
295+ <artifactId >maven-antrun-plugin</artifactId >
296+ <version >1.7</version >
297+ <executions >
298+ <execution >
299+ <id >ant-build</id >
300+ <phase >install</phase >
301+ <goals >
302+ <goal >run</goal >
303+ </goals >
304+ <configuration >
305+ <target >
306+ <echo >拷贝数据库脚本</echo >
307+ <copy todir =" ${release.dir}/script" >
308+ <fileset dir =" script" ></fileset >
309+ </copy >
310+ <echo >拷贝项目配置文件</echo >
311+ <copy todir =" ${release.dir}/conf" >
312+ <fileset dir =" conf" />
313+ </copy >
314+ <echo >拷贝文档</echo >
315+ <copy todir =" ${release.dir}/doc/04_维护文档" >
316+ <fileset dir =" doc/04_维护文档" />
317+ </copy >
318+ <copy todir =" ${release.dir}/doc/06_使用文档" >
319+ <fileset dir =" doc/06_使用文档" />
320+ </copy >
321+ <copy todir =" ${release.dir}/doc/07_演示文档" >
322+ <fileset dir =" doc/07_演示文档" />
323+ </copy >
324+ </target >
325+ </configuration >
326+ </execution >
327+ </executions >
328+ </plugin >
329+
330+ <!-- 项目发布插件(自动生成脚本) -->
331+ <plugin >
332+ <groupId >exp.libs</groupId >
333+ <artifactId >mojo-release-plugin</artifactId >
334+ <version >${mrp.plugin.version}</version >
335+ <executions >
336+ <execution >
337+ <id >mrp</id >
338+ <phase >install</phase >
339+ <goals >
340+ <goal >install</goal >
341+ </goals >
342+ <configuration >
343+ <mavenRepository >D:\mavenRepository</mavenRepository >
344+ <verClass >exp.libs.pojo.Version</verClass >
345+ <mainClass >exp.libs.pojo.Main</mainClass >
346+ <mainArgs ></mainArgs >
347+ <charset >UTF-8</charset >
348+ <jdkPath >java</jdkPath >
349+ <xms >32m</xms >
350+ <xmx >64m</xmx >
351+ <jdkParams ></jdkParams >
352+ <noVerJarRegex >exp-?libs-.*</noVerJarRegex > <!-- 不使用版本号的依赖构件(正则式) -->
353+ <proguard >false</proguard > <!-- 是否使用混淆包(需配置混淆打包插件) -->
354+ </configuration >
355+ </execution >
356+ </executions >
357+ </plugin >
358+
359+ <!-- 打包源码: 项目发布基线版本时会自动打包源码,不要启用此插件,否则会失败 -->
360+ <!-- plugin>
361+ <groupId>org.apache.maven.plugins</groupId>
362+ <artifactId>maven-source-plugin</artifactId>
363+ <version>2.1.2</version>
364+ <executions>
365+ <execution>
366+ <id>attach-sources</id>
367+ <phase>verify</phase>
368+ <goals>
369+ <goal>jar-no-fork</goal>
370+ <goal>test-jar-no-fork</goal>
371+ </goals>
372+ </execution>
373+ </executions>
374+ </plugin -->
375+
376+ <!-- 打包javadoc: 项目发布基线版本时会自动打包javadoc,若报错不要启用此插件 -->
377+ <!-- javadoc插件会强制使用GBK读取pom文件的内容, 若得到的html网页标题乱码, -->
378+ <!-- 则需要通过Run Configurations -> 自定义Maven install命令 -> Common -> Encoding:GBK 确保不会乱码 -->
379+ <plugin >
380+ <groupId >org.apache.maven.plugins</groupId >
381+ <artifactId >maven-javadoc-plugin</artifactId >
382+ <version >2.9.1</version >
383+ <configuration >
384+ <aggregate >true</aggregate >
385+ <charset >UTF-8</charset >
386+ <encoding >UTF-8</encoding >
387+ <docencoding >UTF-8</docencoding >
388+ </configuration >
389+ <executions >
390+ <execution >
391+ <id >attach-javadocs</id >
392+ <goals >
393+ <goal >jar</goal >
394+ </goals >
395+ </execution >
396+ </executions >
397+ </plugin >
398+
399+ </plugins >
400+ </build >
401+
402+ <!-- 项目发布管理 -->
403+ <distributionManagement >
404+
405+ <!-- 私服地址 ,基线仓库 -->
406+ <repository >
407+ <id >Releases</id >
408+ <url >http://127.0.0.1:8081/nexus/content/repositories/releases</url >
409+ </repository >
410+
411+ <!-- 私服地址 ,快照仓库 -->
412+ <snapshotRepository >
413+ <id >Snapshots</id >
414+ <url >http://127.0.0.1:8081/nexus/content/repositories/snapshots</url >
415+ </snapshotRepository >
416+ </distributionManagement >
417+ </project >
418+
419+ ```
55420
56421## 版权声明
57422
0 commit comments