欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ant初探

程序员文章站 2022-05-23 09:06:29
...

前些天和同事交流,他说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初探
            
    
    博客分类: java antjavaMANIFEST 

 

2、建立build.xml文件:

ant初探
            
    
    博客分类: java antjavaMANIFEST 

 

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初探
            
    
    博客分类: java antjavaMANIFEST 

 

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

ant初探
            
    
    博客分类: java antjavaMANIFEST 

 

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

ant初探
            
    
    博客分类: java antjavaMANIFEST 

 

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

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

 

  • ant.pdf (411.1 KB)
  • 下载次数: 43
相关标签: ant java MANIFEST