您的位置:首页 > 其它

ant的jar打包的target

2010-09-23 00:19 302 查看

ant的jar打包的target

Java代码



<project name="client" default="compile" basedir=".">

<property name="product" value="client"/>

<property name="version" value="1.0"/>

<property name="src.dir" value="${basedir}/src"/>

<property name="build.dir" value="${basedir}/build"/>

<property name="lib.dir" value="${basedir}/lib"/>

<property name="jar.file" value="${product}.${version}.jar"/>

<path id="classpath">

<fileset dir="${lib.dir}">

<include name="**/*.jar"/>

</fileset>

</path>

<target name="clean">

<echo>clean build dir</echo>

<delete dir="${build.dir}" quiet="true"/>

<delete file="${lib.dir}/${jar.file}" quiet="true"/>

</target>

<target name="init" depends="clean">

<mkdir dir="${build.dir}"/>

</target>

<target name="compile" depends="init">

<echo>compile the source</echo>

<javac srcdir="${src.dir}" destdir="${build.dir}">

<include name="**/*.java"/>

<classpath refid="classpath"/>

</javac>

</target>

<target name="jar" depends="compile">

<jar destfile="${lib.dir}/${jar.file}">

<fileset dir="${build.dir}">

<include name="**/*.class"/>

</fileset>

<manifest>

<attribute name="Main-Class" value="Demo"/>

<attribute name="Class-Path" value="axis.jar commons-discovery-0.2.jar commons-logging.jar jaxrpc.jar saaj.jar wsdl4j-1.5.1.jar"/>

</manifest>

</jar>

</target>

<target name="run" depends="jar">

<java jar="${lib.dir}/${jar.file}" fork="yes">

</java>

</target>

</project>

<project name="client" default="compile" basedir=".">
<property name="product" value="client"/>
<property name="version" value="1.0"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="lib.dir" value="${basedir}/lib"/>
<property name="jar.file" value="${product}.${version}.jar"/>

<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>

<target name="clean">
<echo>clean build dir</echo>
<delete dir="${build.dir}" quiet="true"/>
<delete file="${lib.dir}/${jar.file}" quiet="true"/>
</target>

<target name="init" depends="clean">
<mkdir dir="${build.dir}"/>
</target>

<target name="compile" depends="init">
<echo>compile the source</echo>
<javac srcdir="${src.dir}" destdir="${build.dir}">
<include name="**/*.java"/>
<classpath refid="classpath"/>
</javac>
</target>

<target name="jar" depends="compile">
<jar destfile="${lib.dir}/${jar.file}">
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
<manifest>
<attribute name="Main-Class" value="Demo"/>
<attribute name="Class-Path" value="axis.jar commons-discovery-0.2.jar commons-logging.jar jaxrpc.jar saaj.jar wsdl4j-1.5.1.jar"/>
</manifest>
</jar>
</target>

<target name="run" depends="jar">
<java jar="${lib.dir}/${jar.file}" fork="yes">
</java>
</target>
</project>


当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误。实际上这是由于当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本yourJarExe.jar的内部class作为类的寻找范围,因此当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设置为codebase目录,所有的class搜索都在这个目录下开始.所以如果使用了其他第三方的jar包,一个比较可以接受的可配置方案,就是利用jar包的Manifest扩展机制.
步骤如下:
1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包复制到/usrhome目录下或/usrhome/lib 等类似的子目录下.
2.修改Manifest 文件
在Manifest.mf文件里加入如下行
Class-Path:classes12.jar lib/thirdlib.jar
Class-Path 是可执行jar包运行依赖的关键词
转自 http://feng413.javaeye.com/blog/306201
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: