1

我有 '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 显示消息: Could not find or load main class 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

任何的想法?

4

2 回答 2

1

清单中的路径Class-Path需要相对于包含清单的 JAR 文件的位置。由于my.jartest.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 文件的位置和您要放在的一组其他 JAR,Class-Path为您计算所有相对路径并为清单生成正确的值属性。

于 2013-05-08T11:39:57.657 回答
0

您正在混合分隔符。将您的替换"${build.dir}\test.jar""${build.dir}/test.jar".

于 2013-05-08T11:26:55.997 回答