Ant构建Java项目总结(1)
Ant构建工程需要注意两点,即工程组织以及Ant构建文件工程组织工程组织是指对一个项目工程进行合理的分层设计和组织,将测试与源代码分离Ant构建文件Ant的一个构建build.xml,即可以合理表达构建的每一个步骤,又能够通过xml文件描述各个层次之间的关系Ant构建项目流程1.项目组织以及Ant的构建文件build before:srccom.wind.doam
·
Ant构建工程需要注意两点,即工程组织以及Ant构建文件
-
工程组织
- 工程组织是指对一个项目工程进行合理的分层设计和组织,将测试与源代码分离
-
Ant构建文件
- Ant的一个构建build.xml,即可以合理表达构建的每一个步骤,又能够通过xml文件描述各个层次之间的关系
Ant构建项目流程
1.项目组织以及Ant的构建文件
build before:
src
com.wind.doamin
Person.java
test
com.wind.domain
PersonTest.java
lib
juint-4.9.jar
build.xml
build after:
src
com.wind.doamin
Person.java
test
com.wind.domain
PersonTest.java
lib
juint-4.9.jar
build
classes
com.wind.domain
Person.class
lib
AntProject.jar
build.xml
2.build.xml配置文件说明
根元素project
<project name="AntProject" default="all" basedir="." ></project>
name属性:为工程提供一个名字,
作用:a.识别日志输出
b.对于IDE工具而言,相当于文件的一个标识符
default属性:构建文件build.xml中的一个目标名称
属性值:clean prepare compile jar all
作用:使得整个工程项目都可以按照指定的目标进行,一般建议要定义default属性,使用默认编译所有内容或者是使用构建文件的帮助
basedir属性:定义工程根目录,一般为此构建文件的所在目录,即“.”
作用:在层次工程的结构中,构建文件需要根据basedir来定义相应的不同参考点
目标target
<target name= "compile" depends= "prepare" description="compile all source">
<javac srcdir= "${src.dir}" destdir="${build.classes}" includeantruntime="on">
<classpath refid="build.classpath"></classpath>
</javac>
</target>
以上的目标是执行编译,告诉Ant要编译源文件信息
- Ant编译普通Java项目
创建build的文件目录
- 在该目录下创建src目录,存放java源代码
- 在该目录下创建classes目录,存放java编译后的字节码文件
- 在该目录下创建dist目录,存放jar包
<!-- create file-->
<target name="createFile">
<!-- first step must be delete dir -->
<delete dir="build"/>
<mkdir dir="build/src"/>
<mkdir dir="build/classes"/>
<mkdir dir="build/dist"/>
</target>
拷贝源码文件
<!-- copy src to build src -->
<target name="copyFile" depends="createFile">
<!-- first step must be delete dir -->
<copy todir="build/src">
<fileset refid="src.path"></fileset>
</copy>
</target>
depends表示该任务依赖于createFile,即执行该任务前必须先执行createFile任务,refid引用了文件集的id,其中定义文件集的如下:
<fileset id="src.path" dir="src">
<!-- include the files -->
<include name="**/**"/>
<!-- exclude the files -->
<exculde name="**/*Test.*"/>
</fileset>
编译源代码并将其拷贝到classes目录下
<target name="compile" depends="createFile">
<javac srcdir="build/src" destdir="build/classes" includeantruntime="on" excludes="**/*Test.java">
</javac>
</target>
编译源代码,srcdir指明源文件的路径,destdir指明要目标文件路径,即将编译好的class文件存放到该路径下excludes指明不编译哪些类型的源文件,includeanttime表示要使用ant的运行环境,如果要使用jdk的运行环境,则需要进行如下配置:
<target name="compile" depends="createFile">
<javac srcdir="build/src" destdir="build/classes" includeantruntime="no" fork="true" excludes="**/*Test.java">
</javac>
</target>
将项目打包为jar
<!-- package project to jar -->
<target name="jar" depends="compile">
<jar destfile="build/dist/Anproject.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.wind.domain.Main"/>
<attribute name="Build-By" value="keithl"/>
</manifest>
</jar>
</target>
将项目打包,首先要依赖于编译任务的完成,其次在该打包的任务下指明事件destfile表示要将该项目打成jar并给jar自定义名称,其次basedir表示需要打包的目标class文件,最后是红色框中的配置是可选的(<manifest>中的xml配置信息),如果要求该jar是可运行的,则需要添加上一个核心配置,即:
<!-- if add like this,then say that jar is avaiabled run -->
<attribute name="Main-Class" value="com.wind.domain.Main"/>
此时在生成的JAR文件下的META-INF下的MAINFEST.MF下增加如下的信息:
Main-Class:com.wind.domain.Main
Build-By:keithl
运行项目
执行项目有两种方式:
一个是根据类路径来运行,arg是main函数的参数传递
一个是基于JAR来运行,arg是main函数的参数传递
<!-- not only execute the project,but also copy the source from the src -->
<target name="execute" depends="jar,copyFile">
<echo>基于类路径的classpath来完成</echo>
<java classpath="build/classess" classname="com.wind.domain.Main">
<arg value="arg parameter 1"/>
<arg value="arg parameter 2"/>
<arg value="arg parameter 3"/>
</java>
<echo>基于JAR来完成</echo>
<java jar="build/dist/AntProject.jar" fork="true">
<arg value="arg parameter 1"/>
<arg value="arg parameter 2"/>
<arg value="arg parameter 3"/>
</java>
</target>
构建Web的Ant模板
<project default= "deploy">
<property name="src.dir" location="src"></property>
<property name="build.dir" location="build"></property>
<property name="build.classes" location="${build.dir}/classes"></property>
<property name="build.war" location="${build.dir}/war"></property>
<property name="web.name" value="AntWebProject"></property>
<property name="web.root" value="WebContent"></property>
<property name="web.WEB-INF" value="${web.root}/WEB-INF"></property>
<property name="web.lib" value="${web.WEB-INF}/lib"></property>
<property environment="env"></property>
<target name="deploy" depends="clean,init,compile,war">
<copy todir="${env.CATALINA_HOME}/webapps">
<fileset dir= "${build.war}" includes="*.war"></fileset>
</copy>
</target>
<target name="clean" >
<delete dir= "${build.dir}"/>
</target>
<target name="init" >
<mkdir dir= "${build.dir}"/>
<mkdir dir= "${build.classes}"/>
<mkdir dir= "${build.war}"/>
</target>
<path id="compile_path" >
<fileset dir= "${web.lib}" includes="**/*.jar"></fileset>
<fileset dir= "${env.CATALINA_HOME}/lib" includes="*.jar"></fileset>
</path>
<target name="compile" >
<javac destdir= "${build.classes}" srcdir="${src.dir}" classpathref="compile_path" includeantruntime="on">
</javac>
</target>
<target name="war" >
<war destfile="${build.war}/${web.name}.war">
<fileset dir= "${web.root}" includes="**/*.*"></fileset>
<lib dir="${web.lib}"></lib>
<webinf dir= "${web.WEB-INF}"></webinf>
<classes dir= "${build.classes}"></classes>
</war>
</target>
</project>
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)