ant初探

前些天和同事交流,他说ant非常好用,他一直在用,学习资料共享后。这几天研究了一下,还真是不错,这里感谢河东的分享。

之前做过一个java的后台项目需要引入很多jar包,先是用fatjar的方式,将整个工程打成一个jar包进行发布的,一旦修改又要重新打包,上传服务器,费时费力。后来研究了一下MANIFEST.MF文件,可以将引用jar配置到这个文件里,虽然是成功了,但MANIFEST.MF的配置太过麻烦,格式要求过于严格。为此我还专门写了一段生成MANIFEST.MF的代码(见之前的文章MANIFEST.MF的应用以及如何读取jar包外的log4j.properties)。下面我们一步一步用ant来构建发布包。

ant的安装略过,apache网站上下载zip包后直接解压即可。本示例使用的是1.7.0版本。

1、示例工程的结构如下:

ant初探

 

2、建立build.xml文件:

ant初探

 

3、打开build.xml,输入如下内容

<?xml version="1.0" ?>
<project name="hlj_task Buildfile" default="compile" basedir=".">
    <!-- 源文件路径 -->
	<property name="src.dir" value="src" />
	<property name="lib.dir" value="lib" />
	<property name="config.dir" value="config" />
	<!-- build路径 -->
	<property name="build.dir" value="build" />
	<property name="build.classes" value="${build.dir}/classes" />
	<property name="build.lib" value="${build.dir}/lib" />
	<property name="build.config" value="${build.dir}/config" />
	<property name="build.bin" value="${build.dir}/bin" />
	<!-- jar里MANIFEST.MF文件的属性 -->
	<property name="jar.name" value="hlj_task.jar" />
	<property name="jar.MainClass" value="com.boco.main.Main" />
	<property name="jar.buildby" value="Shen XueLiang" />
    <!-- 创建build文件夹 -->
	<target name="prepare">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.classes}" />
		<mkdir dir="${build.lib}" />
		<mkdir dir="${build.config}" />
		<mkdir dir="${build.bin}" />
	</target>
    
	<target name="clean" description="Removes all generated files.">
		<delete dir="${build.dir}" />
	</target>
	
	<target name="delclass" description="Removes all classes files.">
		<delete dir="${build.dir}/classes" />
	</target>

	<path id="classpath">
		<fileset dir="${lib.dir}">
			<include name="**/*.jar"/>
		</fileset>
	</path>
	
	<target name="compile" depends="prepare" description="Compiles all source code.">
		<javac srcdir="${src.dir}" destdir="${build.classes}">
			<classpath refid="classpath" />
		</javac>
	</target>
	
	<target name="copyjar">
		<copy todir="${build.lib}">
			<fileset dir="${lib.dir}">
				<include name="**/*.jar"/>
			</fileset>
		</copy>
	</target>
	
	<target name="copyconf">
		<copy todir="${build.config}">
			<fileset dir="${config.dir}">
				<include name="*.*"/>
			</fileset>
		</copy>
	</target>
	<!-- MANIFEST.MF文件的Class-Path属性 -->
    <manifestclasspath property="jar.classpath" 
    	jarfile="${src.dir}/${jar.name}"><!-- 可执行jar文件的路径,jar文件可以不存在,但${src.dir}必须存在 -->
      	<classpath>
      		<fileset dir="${lib.dir}"><!-- 依赖jar所在路径 -->
				<include name="**/*.jar"/>
			</fileset>
      	</classpath>
    </manifestclasspath>
    
	<target name="jar" depends="compile,copyjar,copyconf">
		<jar jarfile="${build.bin}/${jar.name}"
		     basedir="${build.classes}">
		    <manifest>
		     	<attribute name="Built-By" value="${jar.buildby}" />
      			<attribute name="Main-Class" value="${jar.MainClass}" />
      			<attribute name="Class-Path" value="${jar.classpath}" />
    		</manifest>
		</jar>
	</target>
	<!-- jar包制作完成后,删除classes文件夹 -->
	<target name="all" depends="clean,jar,delclass"
	        description="Cleans,compiles,then builds the JAR file." />
</project>

 

4、打开cmd窗口,进入工程路径,输入ant all

ant初探

 

5、ant完成后,build文件夹的结构:

ant初探

 

6、hlj_task.jar文件里,MANIFEST.MF的文件内容:

ant初探

 

这样我们部署的时候,只要把build目录下的所有文件copy到服务器,然后在bin目录下启动hlj_task.jar就可以了。如果

有更新,我们只需要替换更新的jar即可。

 

你可能感兴趣的:(java,ant,Manifest)