持续集成实践

[code]
CC的项目配置:
Xml代码

1. <strong><strong><strong><cruisecontrol>
2. <project requiremodification="false" forceonly="false" name="MavenBasedCI">
3. <modificationset QuietPeriod="30">
4. <svn LocalWorkingCopy="${checkout.dir}\${project.name}" CheckExternals="false" UseLocalRevision="false" />
5. </modificationset>
6. <schedule Interval="300">
7. <maven2 Goal="-e clean site install" MvnHome="D:\OpenSource\maven-2.0.4" PomFile="${checkout.dir}/${project.name}/pom.xml" ShowProgress="false" />
8. </schedule>
9. <bootstrappers>
10. <svnbootstrapper LocalWorkingCopy="${checkout.dir}\${project.name}" />
11. </bootstrappers>
12. <listeners>
13. <currentbuildstatuslistener File="${logs.dir}\${project.name}\status.txt" />
14. </listeners>
15. <log>
16. <merge Dir="${logs.dir}\${project.name}" />
17. <merge Dir="${checkout.dir}\${project.name}\target" Pattern="*.xml" />
18. </log>
19. <publishers>
20. <onsuccess>
21. <artifactspublisher Dest="${artifact.dir}\${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}-1.0-SNAPSHOT.war" />
22. </onsuccess>
23. <artifactspublisher File="${checkout.dir}\${project.name}\target\${project.name}-1.0-SNAPSHOT.war" Dest="artifacts/${project.name}" />
24. <artifactspublisher Dir="${checkout.dir}\${project.name}\target\site" Dest="artifacts/${project.name}" />
25. </publishers>
26. <property name="checkout.dir" value="${basedir}\checkout" />
27. <property name="logs.dir" value="${basedir}\logs" />
28. <property name="artifact.dir" value="${basedir}\artifacts" />
29. </project>
30. <project requiremodification="false" forceonly="false" name="AntBasedCI">
31. <modificationset QuietPeriod="30">
32. <svn LocalWorkingCopy="${checkout.dir}\${project.name}" CheckExternals="false" UseLocalRevision="false" />
33. </modificationset>
34. <schedule Interval="300">
35. <ant AntHome="D:\OpenSource\apache-ant-1.7.1" BuildFile="${checkout.dir}\${project.name}\build.xml" Target="all" />
36. </schedule>
37. <bootstrappers>
38. <svnbootstrapper LocalWorkingCopy="${checkout.dir}\${project.name}" />
39. </bootstrappers>
40. <listeners>
41. <currentbuildstatuslistener File="${logs.dir}\${project.name}\status.txt" />
42. </listeners>
43. <log>
44. <merge Dir="${logs.dir}\${project.name}" />
45. <merge Dir="${checkout.dir}\${project.name}\target" Pattern="*.xml" />
46. </log>
47. <publishers>
48. <onsuccess>
49. <artifactspublisher Dest="${artifact.dir}\${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}.jar" />
50. </onsuccess>
51. <artifactspublisher Dest="artifacts/${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}.jar" />
52. <artifactspublisher Dir="${checkout.dir}\${project.name}\target" Dest="artifacts/${project.name}" />
53. </publishers>
54. </project>
55. <dashboard />
56. <property name="basedir" value="E:\CI\ccworkspace" />
57. <property name="checkout.dir" value="${basedir}\checkout" />
58. <property name="logs.dir" value="${basedir}\logs" />
59. <property name="artifact.dir" value="${basedir}\artifacts" />
60. </cruisecontrol></strong></strong></strong>

<cruisecontrol>
<project requiremodification="false" forceonly="false" name="MavenBasedCI">
<modificationset QuietPeriod="30">
<svn LocalWorkingCopy="${checkout.dir}\${project.name}" CheckExternals="false" UseLocalRevision="false" />
</modificationset>
<schedule Interval="300">
<maven2 Goal="-e clean site install" MvnHome="D:\OpenSource\maven-2.0.4" PomFile="${checkout.dir}/${project.name}/pom.xml" ShowProgress="false" />
</schedule>
<bootstrappers>
<svnbootstrapper LocalWorkingCopy="${checkout.dir}\${project.name}" />
</bootstrappers>
<listeners>
<currentbuildstatuslistener File="${logs.dir}\${project.name}\status.txt" />
</listeners>
<log>
<merge Dir="${logs.dir}\${project.name}" />
<merge Dir="${checkout.dir}\${project.name}\target" Pattern="*.xml" />
</log>
<publishers>
<onsuccess>
<artifactspublisher Dest="${artifact.dir}\${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}-1.0-SNAPSHOT.war" />
</onsuccess>
<artifactspublisher File="${checkout.dir}\${project.name}\target\${project.name}-1.0-SNAPSHOT.war" Dest="artifacts/${project.name}" />
<artifactspublisher Dir="${checkout.dir}\${project.name}\target\site" Dest="artifacts/${project.name}" />
</publishers>
<property name="checkout.dir" value="${basedir}\checkout" />
<property name="logs.dir" value="${basedir}\logs" />
<property name="artifact.dir" value="${basedir}\artifacts" />
</project>
<project requiremodification="false" forceonly="false" name="AntBasedCI">
<modificationset QuietPeriod="30">
<svn LocalWorkingCopy="${checkout.dir}\${project.name}" CheckExternals="false" UseLocalRevision="false" />
</modificationset>
<schedule Interval="300">
<ant AntHome="D:\OpenSource\apache-ant-1.7.1" BuildFile="${checkout.dir}\${project.name}\build.xml" Target="all" />
</schedule>
<bootstrappers>
<svnbootstrapper LocalWorkingCopy="${checkout.dir}\${project.name}" />
</bootstrappers>
<listeners>
<currentbuildstatuslistener File="${logs.dir}\${project.name}\status.txt" />
</listeners>
<log>
<merge Dir="${logs.dir}\${project.name}" />
<merge Dir="${checkout.dir}\${project.name}\target" Pattern="*.xml" />
</log>
<publishers>
<onsuccess>
<artifactspublisher Dest="${artifact.dir}\${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}.jar" />
</onsuccess>
<artifactspublisher Dest="artifacts/${project.name}" File="${checkout.dir}\${project.name}\target\${project.name}.jar" />
<artifactspublisher Dir="${checkout.dir}\${project.name}\target" Dest="artifacts/${project.name}" />
</publishers>
</project>
<dashboard />
<property name="basedir" value="E:\CI\ccworkspace" />
<property name="checkout.dir" value="${basedir}\checkout" />
<property name="logs.dir" value="${basedir}\logs" />
<property name="artifact.dir" value="${basedir}\artifacts" />
</cruisecontrol>

上面的配置是通过CC-Config图形配置自动生成的,包含我们的两个工程。

Ant配置build.xml
Xml代码

1. <strong><strong><strong><?xml version="1.0" encoding="UTF-8"?>
2. <project name="AntBasedCI" default="all">
3.
4. <property name="default.target.dir" value="target" />
5. <property name="classes.dir" value="${default.target.dir}/classes" />
6. <property name="test.classes.dir" value="${default.target.dir}/test-classes" />
7. <property name="test.report.dir" value="${default.target.dir}/test-reports" />
8. <property name="lib.dir" value="${basedir}/lib" />
9. <property name="javadoc.dir" value="${default.target.dir}/apidocs" />
10.
11. <property name="source.dir" value="src" />
12. <property name="test.source.dir" value="test" />
13.
14. <property name="test.pattern" value="**/**Test.java" />
15.
16. <!-- Coverage reports are deposited into these directories -->
17. <property name="cobertura.dir" value="${default.target.dir}/cobertura"/>
18. <!-- Instrumented classes are deposited into this directory -->
19. <property name="instrumented.dir" value="instrumented" />
20.
21. <path id="cobertura.classpath">
22. <fileset dir="${lib.dir}">
23. <include name="*.jar" />
24. </fileset>
25. </path>
26.
27. <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
28.
29. <target name="clean">
30. <delete dir="${classes.dir}"/>
31. <delete dir="${test.classes.dir}"/>
32. <delete dir="${default.target.dir}"/>
33. </target>
34.
35. <target name="init" depends="clean">
36. <mkdir dir="${classes.dir}" />
37. <mkdir dir="${test.classes.dir}" />
38. <mkdir dir="${javadoc.dir}" />
39. <mkdir dir="${default.target.dir}"/>
40. <mkdir dir="${instrumented.dir}"/>
41. <path id="build.classpath">
42. <fileset dir="${lib.dir}">
43. <include name="**/*.jar" />
44. </fileset>
45. <fileset dir="${default.target.dir}">
46. <include name="**/*.jar" />
47. </fileset>
48. </path>
49. </target>
50.
51. <target name="compile-source" depends="init" description="compiles all .java files in source directory ">
52. <javac destdir="${classes.dir}" srcdir="${source.dir}" classpathref="build.classpath" />
53. </target>
54.
55. <target name="instrument" depends="compile-source">
56. <delete file="cobertura.ser"/>
57. <delete dir="${instrumented.dir}" />
58.
59. <!--Instrument the application classes, writing the instrumented classes into ${build.instrumented.dir}.-->
60. <cobertura-instrument todir="${instrumented.dir}">
61. <ignore regex="org.apache.log4j.*" />
62. <fileset dir="${classes.dir}">
63. <!-- Instrument all the application classes, but don't instrument the test classes.-->
64. <include name="**/*.class" />
65. <exclude name="**/*Test.class" />
66. </fileset>
67. </cobertura-instrument>
68. </target>
69.
70. <target name="jar" depends="instrument">
71. <jar jarfile="${default.target.dir}/${ant.project.name}.jar" basedir="${classes.dir}" />
72. </target>
73.
74. <target name="compile-tests" depends="jar" description="compiles all .java files in test directory ">
75. <javac destdir="${test.classes.dir}" srcdir="${test.source.dir}" classpathref="build.classpath" />
76. </target>
77.
78. <target name="javadoc" depends="init">
79. <javadoc author="true" charset="gbk" classpathref="build.classpath"
80. destdir="${javadoc.dir}" version="true" use="true" sourcepath="${source.dir}"></javadoc>
81. </target>
82.
83. <target name="test" depends="compile-tests" description="runs JUnit tests">
84. <mkdir dir="${test.report.dir}" />
85. <junit dir="${basedir}" printSummary="on" fork="true" haltonfailure="true">
86. <sysproperty key="basedir" value="${basedir}" />
87. <formatter type="xml" />
88. <classpath>
89. <path refid="build.classpath" />
90. <pathelement path="${test.classes.dir}" />
91. <pathelement path="${classes.dir}" />
92. </classpath>
93. <batchtest todir="${test.report.dir}">
94. <fileset dir="${test.source.dir}">
95. <include name="${test.pattern}" />
96. </fileset>
97. </batchtest>
98. </junit>
99. </target>
100.
101. <target name="coverage-check">
102. <cobertura-check branchrate="40" totallinerate="100" />
103. </target>
104.
105. <target name="coverage-report">
106. <cobertura-report srcdir="${source.dir}" destdir="${cobertura.dir}" format="html" />
107. </target>
108.
109. <target name="alternate-coverage-report">
110. <!--
111. Generate a series of HTML files containing the coverage
112. data in a user-readable form using nested source filesets.
113. -->
114. <cobertura-report destdir="${cobertura.dir}">
115. <fileset dir="${source.dir}">
116. <include name="**/*.java"/>
117. </fileset>
118. </cobertura-report>
119. </target>
120.
121. <target name="coverage" depends="jar,instrument,test,coverage-report,alternate-coverage-report"/>
122.
123. <target name="pmd" depends="test">
124. <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="build.classpath"/>
125. <pmd>
126. <ruleset>rulesets/basic.xml</ruleset>
127. <ruleset>rulesets/braces.xml</ruleset>
128. <ruleset>rulesets/javabeans.xml</ruleset>
129. <ruleset>rulesets/unusedcode.xml</ruleset>
130. <ruleset>rulesets/strings.xml</ruleset>
131. <ruleset>rulesets/design.xml</ruleset>
132. <ruleset>rulesets/coupling.xml</ruleset>
133. <ruleset>rulesets/codesize.xml</ruleset>
134. <ruleset>rulesets/imports.xml</ruleset>
135. <ruleset>rulesets/naming.xml</ruleset>
136. <formatter type="xml" toFile="${default.target.dir}/pmd_report.xml" />
137. <fileset dir="${source.dir}">
138. <include name="**/*.java" />
139. </fileset>
140. </pmd>
141. </target>
142.
143. <target name="findbugs" depends="jar">
144. <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
145. classpathref="build.classpath" />
146. <findbugs classpathref="build.classpath" pluginlist="${lib.dir}/coreplugin-1.0.jar"
147. output="xml" outputFile="${default.target.dir}/findbugs.xml">
148. <sourcePath path="${source.dir}" />
149. <class location="${default.target.dir}/${ant.project.name}.jar" />
150. </findbugs>
151. </target>
152.
153. <target name="all" depends="coverage,pmd,findbugs,javadoc" />
154.
155. </project>
156. </strong></strong></strong>

<?xml version="1.0" encoding="UTF-8"?>
<project name="AntBasedCI" default="all">

<property name="default.target.dir" value="target" />
<property name="classes.dir" value="${default.target.dir}/classes" />
<property name="test.classes.dir" value="${default.target.dir}/test-classes" />
<property name="test.report.dir" value="${default.target.dir}/test-reports" />
<property name="lib.dir" value="${basedir}/lib" />
<property name="javadoc.dir" value="${default.target.dir}/apidocs" />

<property name="source.dir" value="src" />
<property name="test.source.dir" value="test" />

<property name="test.pattern" value="**/**Test.java" />

<!-- Coverage reports are deposited into these directories -->
<property name="cobertura.dir" value="${default.target.dir}/cobertura"/>
<!-- Instrumented classes are deposited into this directory -->
<property name="instrumented.dir" value="instrumented" />

<path id="cobertura.classpath">
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>

<taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>

<target name="clean">
<delete dir="${classes.dir}"/>
<delete dir="${test.classes.dir}"/>
<delete dir="${default.target.dir}"/>
</target>

<target name="init" depends="clean">
<mkdir dir="${classes.dir}" />
<mkdir dir="${test.classes.dir}" />
<mkdir dir="${javadoc.dir}" />
<mkdir dir="${default.target.dir}"/>
<mkdir dir="${instrumented.dir}"/>
<path id="build.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${default.target.dir}">
<include name="**/*.jar" />
</fileset>
</path>
</target>

<target name="compile-source" depends="init" description="compiles all .java files in source directory ">
<javac destdir="${classes.dir}" srcdir="${source.dir}" classpathref="build.classpath" />
</target>

<target name="instrument" depends="compile-source">
<delete file="cobertura.ser"/>
<delete dir="${instrumented.dir}" />

<!--Instrument the application classes, writing the instrumented classes into ${build.instrumented.dir}.-->
<cobertura-instrument todir="${instrumented.dir}">
<ignore regex="org.apache.log4j.*" />
<fileset dir="${classes.dir}">
<!-- Instrument all the application classes, but don't instrument the test classes.-->
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>

<target name="jar" depends="instrument">
<jar jarfile="${default.target.dir}/${ant.project.name}.jar" basedir="${classes.dir}" />
</target>

<target name="compile-tests" depends="jar" description="compiles all .java files in test directory ">
<javac destdir="${test.classes.dir}" srcdir="${test.source.dir}" classpathref="build.classpath" />
</target>

<target name="javadoc" depends="init">
<javadoc author="true" charset="gbk" classpathref="build.classpath"
destdir="${javadoc.dir}" version="true" use="true" sourcepath="${source.dir}"></javadoc>
</target>

<target name="test" depends="compile-tests" description="runs JUnit tests">
<mkdir dir="${test.report.dir}" />
<junit dir="${basedir}" printSummary="on" fork="true" haltonfailure="true">
<sysproperty key="basedir" value="${basedir}" />
<formatter type="xml" />
<classpath>
<path refid="build.classpath" />
<pathelement path="${test.classes.dir}" />
<pathelement path="${classes.dir}" />
</classpath>
<batchtest todir="${test.report.dir}">
<fileset dir="${test.source.dir}">
<include name="${test.pattern}" />
</fileset>
</batchtest>
</junit>
</target>

<target name="coverage-check">
<cobertura-check branchrate="40" totallinerate="100" />
</target>

<target name="coverage-report">
<cobertura-report srcdir="${source.dir}" destdir="${cobertura.dir}" format="html" />
</target>

<target name="alternate-coverage-report">
<!--
Generate a series of HTML files containing the coverage
data in a user-readable form using nested source filesets.
-->
<cobertura-report destdir="${cobertura.dir}">
<fileset dir="${source.dir}">
<include name="**/*.java"/>
</fileset>
</cobertura-report>
</target>

<target name="coverage" depends="jar,instrument,test,coverage-report,alternate-coverage-report"/>

<target name="pmd" depends="test">
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="build.classpath"/>
<pmd>
<ruleset>rulesets/basic.xml</ruleset>
<ruleset>rulesets/braces.xml</ruleset>
<ruleset>rulesets/javabeans.xml</ruleset>
<ruleset>rulesets/unusedcode.xml</ruleset>
<ruleset>rulesets/strings.xml</ruleset>
<ruleset>rulesets/design.xml</ruleset>
<ruleset>rulesets/coupling.xml</ruleset>
<ruleset>rulesets/codesize.xml</ruleset>
<ruleset>rulesets/imports.xml</ruleset>
<ruleset>rulesets/naming.xml</ruleset>
<formatter type="xml" toFile="${default.target.dir}/pmd_report.xml" />
<fileset dir="${source.dir}">
<include name="**/*.java" />
</fileset>
</pmd>
</target>

<target name="findbugs" depends="jar">
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
classpathref="build.classpath" />
<findbugs classpathref="build.classpath" pluginlist="${lib.dir}/coreplugin-1.0.jar"
output="xml" outputFile="${default.target.dir}/findbugs.xml">
<sourcePath path="${source.dir}" />
<class location="${default.target.dir}/${ant.project.name}.jar" />
</findbugs>
</target>

<target name="all" depends="coverage,pmd,findbugs,javadoc" />

</project>

从上面的配置我们看到这个构建包括:编译、测试、测试覆盖率统计、代码检查、BUG查找、生成Javadoc和打包。

Maven的配置pom.xml
Xml代码

1. <strong><strong><strong><?xml version="1.0" encoding="GBK"?>
2. <project xmlns="http://maven.apache.org/POM/4.0.0"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
5. <modelVersion>4.0.0</modelVersion>
6. <groupId>com.samueli.webapp</groupId>
7. <artifactId>MavenBasedCI</artifactId>
8. <packaging>war</packaging>
9. <version>1.0-SNAPSHOT</version>
10. <name>MavenBasedCI</name>
11. <description>持续集成测试项目</description>
12. <url>http://www.samueli.com</url>
13. <licenses>
14. <license>
15. <name>Fake License</name>
16. <url>http://127.0.0.1:8080/dc-license.txt</url>
17. <distribution>repo</distribution>
18. </license>
19. </licenses>
20. <!-- 问题管理 -->
21. <issueManagement>
22. <system>jira</system>
23. <url>http://169.254.11.166:8088/secure/Dashboard.jspa</url>
24. </issueManagement>
25. <!-- 源代码管理 -->
26. <scm>
27. <connection>scm:svn://127.0.0.1/repos/MavenBasedCI</connection>
28. <developerConnection>
29. scm:svn://127.0.0.1/repos/MavenBasedCI
30. </developerConnection>
31. <tag>head</tag>
32. <url>svn://127.0.0.1/repos/MavenBasedCI</url>
33. </scm>
34.
35. <!-- 开发人员以及角色定义 -->
36. <developers>
37. <developer>
38. <name>aaa</name>
39. <id>aaa</id>
40. <email>aaa@samueli.com</email>
41. <organization>samueli</organization>
42. <roles>
43. <role>PM</role>
44. </roles>
45. </developer>
46. <developer>
47. <name>bbb</name>
48. <id>bbb</id>
49. <email>bbb@samueli.com</email>
50. <organization>samueli</organization>
51. <roles>
52. <role>设计人员</role>
53. <role>开发人员</role>
54. </roles>
55. </developer>
56. </developers>
57.
58. <!-- 依赖定义 -->
59. <dependencies>
60. <dependency>
61. <groupId>junit</groupId>
62. <artifactId>junit</artifactId>
63. <version>3.8.1</version>
64. <scope>test</scope>
65. </dependency>
66. <dependency>
67. <groupId>commons-lang</groupId>
68. <artifactId>commons-lang</artifactId>
69. <version>2.3</version>
70. </dependency>
71. </dependencies>
72.
73. <!--依赖版本管理-->
74. <dependencyManagement />
75. <organization>
76. <name>XXX有限责任公司</name>
77. <url>http://www.samueli.com</url>
78. </organization>
79.
80. <!--项目模块管理-->
81. <modules />
82.
83. <build>
84. <plugins>
85. <plugin>
86. <artifactId>maven-site-plugin</artifactId>
87. <configuration>
88. <locales>zh_CN</locales>
89. <outputEncoding>GBK</outputEncoding>
90. </configuration>
91. </plugin>
92. <plugin>
93. <artifactId>maven-compiler-plugin</artifactId>
94. <configuration>
95. <source>1.5</source>
96. <target>1.5</target>
97. <encoding>GBK</encoding>
98. </configuration>
99. </plugin>
100. <plugin>
101. <artifactId>maven-checkstyle-plugin</artifactId>
102. <configuration>
103. <outputEncoding>GBK</outputEncoding>
104. </configuration>
105. </plugin>
106. <plugin>
107. <groupId>org.apache.maven.plugins</groupId>
108. <artifactId>maven-pmd-plugin</artifactId>
109. <executions>
110. <execution>
111. <goals>
112. <goal>check</goal>
113. </goals>
114. </execution>
115. </executions>
116. <configuration>
117. <linkXref>true</linkXref>
118. <sourceEncoding>GBK</sourceEncoding>
119. </configuration>
120. </plugin>
121. <plugin>
122. <groupId>org.codehaus.mojo</groupId>
123. <artifactId>cobertura-maven-plugin</artifactId>
124. <version>2.0</version>
125. <configuration>
126. <instrumentation>
127. <excludes>
128. <exclude>
129. com/samueli/MavenBasedCI/util/*.class
130. </exclude>
131. </excludes>
132. </instrumentation>
133. <check>
134. <haltOnFailure>true</haltOnFailure>
135. <totalLineRate>40</totalLineRate>
136. <totalBranchRate>100</totalBranchRate>
137. </check>
138. <outputEncoding>GBK</outputEncoding>
139. </configuration>
140. <executions>
141. <execution>
142. <id>clean</id>
143. <goals>
144. <goal>clean</goal>
145. </goals>
146. </execution>
147. <execution>
148. <id>check</id>
149. <goals>
150. <goal>check</goal>
151. </goals>
152. </execution>
153. </executions>
154. </plugin>
155. </plugins>
156. <extensions>
157. <extension>
158. <groupId>org.apache.maven.wagon</groupId>
159. <artifactId>wagon-ftp</artifactId>
160. <version>1.0-alpha-6</version>
161. </extension>
162. </extensions>
163. </build>
164.
165. <distributionManagement>
166. <repository>
167. <id>ftp-repository</id>
168. <url>ftp://192.168.3.241</url>
169. </repository>
170. <site>
171. <id>lmss.site</id>
172. <name>MavenBasedCI</name>
173. <url>file:///Y:\</url>
174. </site>
175. </distributionManagement>
176.
177. <!--各种报告-->
178. <reporting>
179. <plugins>
180. <plugin>
181. <artifactId>maven-site-plugin</artifactId>
182. <configuration>
183. <locales>zh_CN</locales>
184. <outputEncoding>GBK</outputEncoding>
185. </configuration>
186. </plugin>
187. <plugin>
188. <artifactId>maven-surefire-report-plugin</artifactId>
189. <configuration>
190. <showSuccess>false</showSuccess>
191. <outputEncoding>GBK</outputEncoding>
192. </configuration>
193. </plugin>
194. <plugin>
195. <groupId>org.apache.maven.plugins</groupId>
196. <artifactId>maven-jxr-plugin</artifactId>
197. <configuration>
198. <outputEncoding>GBK</outputEncoding>
199. <inputEncoding>GBK</inputEncoding>
200. </configuration>
201. </plugin>
202. <plugin>
203. <groupId>org.apache.maven.plugins</groupId>
204. <artifactId>maven-javadoc-plugin</artifactId>
205. <configuration>
206. <aggregate>true</aggregate>
207. <charset>UTF16</charset>
208. </configuration>
209. </plugin>
210. <plugin>
211. <groupId>org.apache.maven.plugins</groupId>
212. <artifactId>maven-pmd-plugin</artifactId>
213. <configuration>
214. <rulesets>
215. <ruleset>/rulesets/basic.xml</ruleset>
216. <ruleset>/rulesets/imports.xml</ruleset>
217. <ruleset>/rulesets/unusedcode.xml</ruleset>
218. <ruleset>/rulesets/finalizers.xml</ruleset>
219. </rulesets>
220. <outputEncoding>GBK</outputEncoding>
221. <linkXref>true</linkXref>
222. <excludes>
223. <exclude>
224. com/samueli/MavenBasedCI/util/*.java
225. </exclude>
226. </excludes>
227. </configuration>
228. </plugin>
229. <plugin>
230. <groupId>org.apache.maven.plugins</groupId>
231. <artifactId>maven-checkstyle-plugin</artifactId>
232. <configuration>
233. <configLocation>lmss_checks.xml</configLocation>
234. <outputEncoding>GBK</outputEncoding>
235. </configuration>
236. </plugin>
237. <plugin>
238. <groupId>org.codehaus.mojo</groupId>
239. <artifactId>taglist-maven-plugin</artifactId>
240. <configuration>
241. <tags>
242. <tag>TODO</tag>
243. <tag>@todo</tag>
244. <tag>FIXME</tag>
245. <tag>XXX</tag>
246. </tags>
247. <outputEncoding>GBK</outputEncoding>
248. </configuration>
249. </plugin>
250. <plugin>
251. <groupId>org.codehaus.mojo</groupId>
252. <artifactId>cobertura-maven-plugin</artifactId>
253. <version>2.0</version>
254. <configuration>
255. <outputEncoding>GBK</outputEncoding>
256. </configuration>
257. </plugin>
258. <!-- <plugin>-->
259. <!-- <groupId>org.codehaus.mojo</groupId>-->
260. <!-- <artifactId>changes-maven-plugin</artifactId>-->
261. <!-- </plugin>-->
262. <plugin>


http://www.iteye.com/topic/239628


263. <groupId>org.codehaus.mojo</groupId>
264. <artifactId>changelog-maven-plugin</artifactId>
265. </plugin>
266. <plugin>
267. <groupId>org.codehaus.mojo</groupId>
268. <artifactId>findbugs-maven-plugin</artifactId>
269. <configuration>
270. <xmlOutput>true</xmlOutput>
271. </configuration>
272. </plugin>
273.
274. </plugins>
275. </reporting>
276. </project></strong></strong></strong>
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值