我有“test.jar”。我想创建 'my.jar' 。我想要 my.jar 包含 test.jar
我的代码:
<target name="jar" >
<copy file="${conf.dir}/default.xml" todir="${build.classes}" />
<jar jarfile="${build.dir}/test.jar" basedir="${build.classes}">
<manifest>
</manifest>
</jar>
</target>
<target name="services-jar">
<jar jarfile="${build.dir}/my.jar">
<manifest>
<attribute name="Main-Class" value="mypackage.MyClass" />
<attribute name="Class-Path" value="${build.dir}/test.jar" />
</manifest>
</jar>
</target>
如果我运行“my.jar”:java -jar my.jar
显示消息:无法找到或加载主类 mypackage.MyClass
我的MANIFEST.MF文件:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.7.0_17-b02 (Oracle Corporation)
Main-Class: mypackage.MyClass
Class-Path: ./build/test.jar
有什么想法吗?
最佳答案
list 中的路径 Class-Path
需要相对于包含 list 的 JAR 文件的位置。由于两者 my.jar
和test.jar
位于同一目录( ${build.dir}
),相对路径只是 test.jar
,即你需要
<jar jarfile="${build.dir}/my.jar">
<manifest>
<attribute name="Main-Class" value="mypackage.MyClass" />
<attribute name="Class-Path" value="test.jar" />
</manifest>
</jar>
更一般地说,您可能希望查找 <manifestclasspath>
任务,给定目标 JAR 文件的位置以及您想要放在 Class-Path
上的一组其他 JAR。 ,为您计算所有相对路径并为 list 属性生成正确的值。
关于java - 如何通过 Ant 将一个 jar 文件包含另一个 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16439109/