Ant与Java整合

1. 使用Ant工具编译Java程序

  Ant提供了javac核心任务,javac任务用于实现编译Java程序的功能。Ant工具提供了一个全局属性,用于指定使用的Java编译器;javac任务会使用指定的编译器对Java程序进行编译。默认时编译器为当前运行Ant工具的JDK。这个用于设定Java编译器的属性为build.compiler。

1.1 javac任务包含以下属性

  1. srcdir:用于指定Java源文件所在的目录。这个属性是必须的,除非直接引用<src>元素。
  2. destdir:指定一个目标位置用于存放编译后的class程序。
  3. includes:指定要包含的Java源文件,可使用逗号和空格符进行分隔。当忽略时代表包含所有Java文件。
  4. includesfile:用于指定要包含的文件的名称。
  5. excludes:用于指定将不被包含的Java源文件,可以使用逗号和空格符进行分隔。
  6. excludesfile:用于指定不需要进行编译的Java文件。
  7. classpath:用于指定类库的引用位置。
  8. sourcepath:用于指定源文件的路径,可直接引用<src>元素。
  9. bootclasspath:用于指定启动的class位置。
  10. classpathref:用于指定类库的位置,通过对已定义的<path>元素的引用来指定。
  11. sourcepathref:用于指定源文件的位置,通过对已定义的<path>元素的引用来指定。
  12. bootclasspathref:用于指定启动类文件的位置,也通过对已定义的<path>元素的引用来指定。
  13. extdirs:用于指定安装扩展的位置。
  14. encoding:用于指定Java文件的编码方式。
  15. nowarn:用于指定是否把-nowarn交换参数传递给Java编译器。默认为不传递。
  16. debug:用于设定编译源文件时是否输出调试信息。默认为off,代表把-g:none这个参数以命令行方式传递给编译器。
  17. debuglevel:用于指定编译时的调试级别。这个属性依赖于编译器,不常使用。
  18. optimize:用于指定编译Java源代码时是不是使用优化方式进行编译。默认为off,对源文件进行完全编译。
  19. deprecation:用于指定编译Java源文件时是否带deprecation信息。
  20. target:用于指定编译时的JVM的版本,默认时采用当前运行Ant的JVM的版本。要注意的是,如果使用JVM1.5进行编译,那么在JDK1.4或更早版本的Java环境时可能无法运行这些Java程序。
  21. verbose:指定编译Java源文件时使用-verbose参数,可以输出更详细的操作信息。
  22. depend:用于指定在编译Java程序时允许依赖跟踪(dependency-tracking)。这个属性只有jikes和classic编译器才起作用。
  23. includeJavaRuntime:用于设定是否把Java的运行库添加到classpath中。默认为false。
  24. includeAntRuntime:用于设定是否把Ant工具的运行库添加到classpath中默认为true。
  25. fork:用于指定是否在执行javac命令时使用外部Java编译器。默认为no,代表不使用外部编译器。
  26. executable:用于指定外部Java编译器的位置。当fork=yes时使用。
  27. memoryInitialSize:用于指定JVM初始化时占用的内存值,当指定了使用外部JVM进行构建时,可通过这个属性指定JVM的初始化内存。忽略时代表使用标准的JVM设置。
  28. memoryMaximumsize:用于指定JVM使用的最大内存值。当指定了外部JVM时,可以通过这个属性进行设定。忽略时,使用标准的JVM设置。
  29. failonerror:用于指定是否当出现编译错误时停止执行编译。默认为true,代表当出现错误时停止执行编译。
  30. source:用于指定在执行javac命令时是否使用-source命令行参数。默认为no,代表不使用。使用这个属性时请确认所使用的JVM支持-source这个参数。
  31. compiler:用于指定使用的编译器,可使用上面所说的编译器。默认时使用当前JVM作为编译器。
  32. listfiles:用于指定是否列出所有被编译的Java源文件。
  33. tempdir:用于指定临时文件的存放位置。

1.2 使用Ant工具编译Java程序实例

1.2.1 使用默认的编译器编译Java程序

<javac srcdir="${src}"
	destdir="${build}"
	classpath="spring.jar"
	debug="on"
	source="1.5"
/>

作用:编译${src}下的所有Java文件。编译后的class文件保存在${build}下。在编译时使用当前目录下的spring.jar进行编译,并显示调试信息。这个例子使用JVM1.5进行编译。

1.2.2 通过src类型指定源文件,并制定要编译的Java源文件

<javac destdir="${build}" classpath="abc.jar" debug="on">
	<src path="$src}/>	
	<src path="$src2}/>
	<include name="mypackage/p1/**"/>
	<include name="mypackage/p2/**"/>
	<exclude name="mypackage/p1/testpackage/**"/>
</javac>

作用:编译${src}和${src2}指定的源文件,包括package名为mypackage.p1开头或mypackage.p2开头的Java源文件,但是不包括mypackage.p1.testpackage开头的源文件。

1.2.3 使用外部编译器编译Java源文件

<javac srcdir="${src}"
	destdir="${build}"
	fork="yes"
	executable="c:/java/jdk1.1/bin/javac"
	compiler="javac1.1"
/>

使用外部Java编译器来编译Java程序,通过executable指定javac程序的位置。这里使用JVM1.1进行编译编译。

2. 使用Ant工具运行Java程序

Ant提供了Java这个核心任务用于实现执行Java程序的功能。

2.1 Java任务包含的属性

  1. classname:用于指定要执行的Java类。
  2. jar:用于指定要执行的jar文件的位置。这个jar文件一定要包含manifest目录和Main-Class实体。值得注意的时,如果这个属性被指定,那么fork属性必须设定为true。jar和classname这两个属性中的其一必须被指定。
  3. args:用于指定类执行时的参数。已不建议使用,可使用arg类型来代替。
  4. classpath:用于指定执行Java程序的引用类路径。
  5. classpathref:用于指定类库的引用。允许引用path类型定义的类库路径。
  6. fork:用于指定是否允许Java程序在另外的Java虚拟机上运行,而不是用当前运行Ant的JVM。
  7. outlive:用于指定是否允许打开一个进程并在Ant工具外运行。使用这个属性时需要设定fork属性为true。这个属性不兼容timeout、input、output、error和result属性。
  8. jvm:用于指定一个命令,然后调用Java虚拟机执行这个命令。这个命令将会通过java.lang.Runtime.exec()方法执行。默认时执行java命令。
  9. jvmargs:用于设定Java虚拟机参数,供Java虚拟机调用。这个属性已不建议使用,可以使用jvmarg类型来定义。
  10. maxmemory:用于设定Ant工具所启动的Java虚拟机所占用内存的最大值。
  11. failonerror:用于指定当命令出错或退出时返回一个非0的值时是否停止执行构建进程。默认为false。
  12. resultproperty:用于指定一个已定义的属性,这个被指定的属性用于记录命令执行时的返回值。
  13. dir:用于调用Java虚拟机的目录。
  14. output:用于指定一个用于信息输出的文件。
  15. error:用于指定标准错误信息的输出目录。
  16. logError:用于设定是否把信息输出到Ant的日志文件中。
  17. appended:用于指定是否附加或覆盖output和error指定的文件。默认为false。
  18. outputproperty:用于指定一个已定义的属性,这个属性用于存储输出信息。
  19. errorproperty:用于指定一个已定义的属性,这个属性用于存储输出的错误信息。
  20. input:用于指定输入文件,作为命令执行时的标准输入使用。
  21. inputstring:用于指定一个输入字符串,作为执行命令的输入参数。
  22. newenvironment:用于指定当新的环境变量被指定时不再传递旧的环境变量。默认为false。
  23. timeout:用于指定一个命令的执行时间,如果在指定时间内构建进程没完成,则这个命令将会被终止。建议当fork属性为true时才使用这个属性。

2.2 使用Ant运行Java程序实例

2.2.1 运行编译后的Java程序实例

<java classname="test.Main">
	<classpath>
		<pathelement location="dist/test.jar"/>
		<pathelement path="${java.class.path}"/>	
	</classpath>	
</java>

作用:运行test.Main这个Java程序,在运行前已生成test.jar文件,其中test.Main是这个jar的main方法。${java.class.path}是test.Main依赖的类库。

3. 使用Ant生成和解压jar文件

  jar文件可称为Java归档文件,对编译后的.class文件进行打包。它可放在classpath中直接引用,也可以直接运行jar文件(需要指定jar中的Main-Class)。Ant工具提供了jar和Unjar这两个任务,可以方便地实现生成和解压jar文件的功能。

3.1 使用jar任务打包jar文件

  1. destfile:用于定义将要生成的.jar文件的名称。这个属性是必须的。
  2. basedir:用于指定要打包的.class文件的位置。
  3. compress:用于设定是否对打包的文件进行压缩。默认为true,进行压缩。
  4. keepcompression:在Ant1.6版本后提供了这个属性用于指定来自ZipFileSet等归档文件的文件是否保存本身的压缩方式。默认为false。
  5. encoding:用于设定文件名的编码方式。默认为utf-8编码。
  6. filesonly:用于指定是否只保存文件。默认为false。
  7. includes:用于指定家人文件中要包含的文件。可以使用逗号或空格符进行分隔。
  8. includesfile:用于指定要包含的文件的匹配模式。
  9. excludes:用于指定那些文件在jar文件中将不被包含。
  10. excludesfile:用于指定jar文件中将不被包含的文件的匹配模式,用于文件过滤。
  11. defaultexcludes:用于设定是否不包含Ant工具默认不包含的目录和文件。可取值true或false,忽略时代表不包含。
  12. manifest:用于指定是否使用jar规范中的manifest文件。相当于在jar中生成META-INF/MANIFEST.MF文件。
  13. filesetmanifest:用于定义当在jar文件中存在多个Manifest时(在ZipFileSet中存在),如何生成新的manifest属性。可取值skip、merge或mergewithoutmain。skip代表忽略ZipFileSet中原有的manifest,取值merge代表合并所有的manifests;取值mergewithoutmain代表合并所有manifests但是不包含manifest Main函数的定义。
  14. update:用于定义当jar中的目标文件已存在时是否更新或覆盖目标文件。默认为false。
  15. whenempty:用于指定当没有找到符合打包jar文件的文件时的处理方式。可取值为fail、skip或create。取值fail代表Ant工具会提示出错不生成jar文件;取值skip代表不处理不生成jar文件;取值create代表生成一个空的jar文件。默认为skip。
  16. duplicate:用于定义文件名重复时的处理方式。取值可以时add、preserve或fail。取值add代表添加用后面的覆盖前面的;取值preserve代表不覆盖已存在的文件;取值fail代表操作失败。
  17. index:用于设定是否使用一个索引文件,用于记录jar里的文件结构。默认为false。
  18. manifestencoding:用于定义读取jar文件中的manifest的编码方式,前提是jar文件中定义了manifest。

在打包jar文件时需要用到manifest任务,用于定义jar的文件描述。

manifest任务包含以下属性:

  • file:用于指定建立或更新manifest-file文件。
  • mode:定义文件操作。可取值为update或replace。默认为replace。
  • encoding:用于定义读取manifest时的编码方式。

另外,在manifest任务中还可以使用attribute和section类型

  • attribute类型包含一个名称和值得对应关系
  • section类型只有一个name属性,一个section可包含一个或多个attribute。

3.2 使用Ant工具打包jar文件实例

3.2.1 打包编译后的.class文件,并对文件进行过滤

<jar destfile="${dist}/lib/app.jar"
	basedir="${build}/classes"
	includes="mypackage/test/**"
	excludes="**/Test.class"
/>

3.2.2 通过FileSet定义需要打包的.class文件

<jar destfile="${dist}/lib/app.jar">
	<fileset dir="${build}/classes"
		excludes="**/Test.class"
	/>
	<fileset dir="${src}/resources"/>	
</jar>

3.2.3 打包jar文件并生成manifest文件

<jar destfile="test.jar" basedir="${build}/classes">
	<include name="mypackage/test/**/">
	<manifest>
		<attribute name="Built-By" value="${user.name}"/>
		<section name="common/class1.class">
			<attribute name="Sealed" value="false"/>	
		</section>	
	</manifest>	
</jar>

运行上面的文件,生成的manifest文件内容如下:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.7
Created-By: 1.8.0_112-b15 (Oracle Corporation)
Built-By: fanxiaobin

Name: common/class1.class
Sealed: false

4. 使用Ant工具解压jar、war和ear文件

4.1 使用Ant工具解压归档文件的任务

  • src:用于指定要解压的文件位置。这个属性是必需的,也可以通过FileSet指定。
  • dest:用于定义解压后的文件存放位置。这个属性是必需的。
  • overwrite:用于定义当目标位置的文件比归档文件中的文件新时,是否覆盖旧的文件。默认为true,代表覆盖。
  • compression:只适用于untar命令时使用。可以取值none、gzip或bzip2.。默认为none。
  • encoding:用于指定文件的编码方式,但这个属性不能用于untar命令。

另外,在unzip任务中还可以使用FileSet和PatternSet类型。

4.2 使用Ant工具解压归档文件

<?xml version="1.0"?>
<project name="unzip" default="unjar" basedir=".">
	<property name="classpath" value="compile.jar"/>
	<!-- unjar the file -->
	<target name="unjar" >
		<mkdir dir="unzip"/>
		<unzip src="${classpath}" dest="unzip"/>				
	</target>
</project>

参考资料:

《Ant开发及整合应用详解》

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页