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
相关文章推荐
- 使用maven下载jar包,使用ant打包。yqxt项目的安装。
- java语言 ant.jar zip打包 utils工具类 通用性强
- Ant将多个jar打包为一个jar
- Java:Ant打包jar文件(有lib目录)
- android ant 打包全过程 包含library,so,jar,混淆,签名
- 如何不通过maven或者ant将项目打包成可执行的Jar包
- eclipse下用ant打包添加jar包方法
- ant将多个jar打包为一个jar
- 使用maven下载jar包,使用ant打包。yqxt项目的安装。
- ant打包jar文件脚本分享
- 用ant打包可运行的jar文件 (将第三方jar包放进你自己的jar包)
- 通过ANT打包jar并生成MANIFEST.MF中的Class-Path属性
- ant build.xml 打包应三方jar注意的问题与混淆R的写法
- ant编译打包可运行的jar文件,并包含所依赖的第三方jar包
- 用ant打包可运行的jar文件 (将第三方jar包放进你自己的jar包)
- ant打包jar的build.xml配置
- 用ant打包可运行的jar文件 (将第三方jar包放进你自己的jar包)
- 使用Ant编译项目,旧版SDK用apkbuilder打包,新版SDK没有apkbuilder工具,用sdklib.jar打包apk
- ant编译打包可运行的jar文件,并包含所依赖的第三方jar包
- Ant打包jar,程序的混淆