项目打包是持续集成最基本的一个环节,当前主流的是maven,还有比较老点的ant,还有很多其他的打包工具。
打包版本号都是通过一个buildnumber.properties文件维护,打包工具的插件自动维护这个文件。
#Build Number for ANT. Do not edit! #Thu Jul 21 20:09:18 CST 2016 name_project=>e-3pl build.number=1002 groupId=eal build.date=2016-07-21 20:09:17 artifactId=eal-3pl
一、maven打包维护版本号
1、使用maven-antrun-plugin插件
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>createVersion</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property file="${basedir}/buildnum.properties" />
<propertyfile file="${basedir}/buildnum.properties">
<entry key="build.date" type="date" value="now"
pattern="yyyy-MM-dd HH:mm:ss" />
</propertyfile>
<copy todir="${project.build.directory}/dist/${build.number}">
<fileset dir="${project.build.directory}">
<include name="e-3pl.war" />
</fileset>
</copy>
<copy file="${basedir}/buildnum.properties" todir="${project.build.directory}/dist" />
<buildnumber file="${basedir}/buildnum.properties" />
</target>
</configuration>
</execution>
</executions>
</plugin>
二、使用ant打包
ant的build.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!-- 定义一个工程,默认任务为warFile。 --> <project name="yxw" default="number-1" basedir="."> <property name="project.build.directory" value="target1"></property> <!-- 定义属性,打成war包的名称。 --> <property name="warFileName" value="yxw.war"></property> <!-- 定义路径,编译java文件时用到的jar包。 --> <path id="project.lib"> <fileset dir="${basedir}/WebRoot/WEB-INF/lib"> <include name="**/*.jar"/> </fileset> </path> <!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 --> <target name="clean"> <delete dir="${basedir}/build" /> <mkdir dir="${basedir}/build" /> <delete dir="${basedir}/target1" /> <mkdir dir="${basedir}/target1" /> </target> <!-- 定义任务,编译java文件夹中的java文件,编译后的class文件放到创建的文件夹下。 --> <target name="compile" depends="clean"> <javac fork="true" executable="/root/usr/local/cip_3.0/work/.jenkins/tools/hudson.model.JDK/jdk_1.7/bin/javac" srcdir="${basedir}/src" excludes="${basedir}/test/*.java" destdir="${basedir}/build" includeantruntime="false"> <classpath refid="project.lib"> </classpath> </javac> </target> <!-- 定义默认任务,将class文件集合成jar包。 --> <target name="warFile" depends="compile"> <buildnumber file="${basedir}/buildnum.properties" /> <echo message="${build.number}"/> <propertyfile file="${basedir}/buildnum.properties"> <entry key="build.date" type="date" value="now" pattern="yyyyMMddHHmmss" /> </propertyfile> <copy todir="${project.build.directory}/dist/${build.number}"> <fileset dir="${project.build.directory}"> <include name="yxw.war" /> </fileset> </copy> <!--<copy file="${basedir}/buildnum.properties" todir="${project.build.directory}/dist" />--> <!-- 删除原有war包。 --> <delete dir="${basedir}/target1/dist" /> <mkdir dir="${basedir}/target1/dist/${build.number}" /> <!-- 建立新war包。 --> <war destfile="${basedir}/target1/dist/${build.number}/${warFileName}" webxml="${basedir}/WebRoot/WEB-INF/web.xml"> <!-- 将非jar和非class文件拷贝到war包的对应路径下。 --> <fileset dir="${basedir}/WebRoot"> <include name="**/**.*" /> <exclude name="**/*.jar"/> <exclude name="**/*.class"/> </fileset> <!-- 将jar和class文件拷贝到war包的对应路径下。 --> <lib dir="${basedir}/WebRoot/WEB-INF/lib" > <exclude name="**/jsp-api.jar"/> </lib> <classes dir="${basedir}/build" /> <!--<classes dir="${basedir}/WebRoot/WEB-INF/resources" /> <classes dir="${basedir}/WebRoot/WEB-INF/struts" />--> </war> <copy file="${basedir}/buildnum.properties" todir="${project.build.directory}/dist" /> </target> <target name="number-1" depends="warFile"> <propertyfile file="${project.build.directory}/dist/buildnum.properties"> <entry key="build.number" type="int" value="${build.number}-1"/> </propertyfile> <echo message="${build.number}"/> </target> </project>