近几天在做一个小项目,需要使用ant编译并能够将SVN版本信息打包进所编译出的jar包,为此查了很多资料,总结如下:
1.运行环境需要安装ant并配置好环境变量(此点很重要,Eclipse自带的ant某些功能会受限报错)
2.安装xmltask(http://www.oopsconsultancy.com/software/xmltask/),方法如下:
方案一:Eclipse中 Window > Preferences > Ant > Runtime > Classpath, select “Global Entries” ,Add external Jar
方案二:将依赖jar包放入classpath文件夹(与src同级)
3.编写build.xml
①根节点下添加taskdef节点
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>;
②根节点下添加property 目录节点
<!-- 根目录 -->
<property name="base.dir" location="${basedir}" />
<!-- 源码目录 -->
<property name="src.dir" location="${basedir}/src" />
③根节点下添加target 节点
<target name="version">
<exec dir="${src.dir}" executable="svn">
<arg line="up" />
</exec>
<exec dir="${src.dir}" executable="svn" output="svninfo.xml">
<arg line="info --xml ${src.dir}" />
</exec>
<xmltask source="svninfo.xml">
<copy path="/info/entry/@revision" property="svn.head.rev" />
</xmltask>
</target>
需要注意的是在编译的target节点需要加上以来该节点,如
<target name="build" depends="init, version, complier, copy-resource, pack-jar, clean">
④将生成在程序根目录的svninfo.xml拷贝到生成的cliass根目录中
<target name="complier">
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="on" classpath="${lib.dir}" target="${complier.version}" encoding="UTF-8">
<classpath refid="lib.classpath" />
</javac>
<!-- 2.把svn信息的XML打包进去 -->
<copy file="${base.dir}/svninfo.xml" todir="${build.dir}/classes" overwrite="true"/>
</target>
⑤在代码中读取该XML中的信息即可获取输出SVN版本信息
参考:
https://blog.csdn.net/edychang/article/details/12781671
https://blog.csdn.net/yonghutwo/article/details/45799739