Apache ant清单类路径?

时间:2009-03-25 18:23:29

标签: java ant manifest.mf

我有一个java项目的标准项目布局:

project /
    src /
        source_file_1.java
        ...
        source_file_N.java
    build /
          classes /
              source_file_X.class
              ...
          jar /
              MyJar.jar
    lib /
          SomeLibrary.jar
          SomeOtherLibrary.jar

据我所知,我正在使用Ant正确构建项目。我需要在Manifest文件中设置class-path属性,以便我的类可以使用所需的库。

build.xml

中的以下相关信息
<target name="compile" depends="init">
    <javac srcdir="src" destdir="build\classes">
        <classpath id="classpath">
            <fileset dir="lib">
                <include name="**/*.jar" />
            </fileset>
        </classpath>
    </javac>
</target>

<target name="jar" depends="compile">
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" >
        <manifest>
            <attribute name="Built-By" value="${user.name}" />
        </manifest>
    </jar>
</target>

任何正确方向的推动都值得赞赏。感谢

2 个答案:

答案 0 :(得分:38)

假设库不会将位置从编译更改为执行jar文件,您可以在编译目标之外的类路径中创建一个路径元素,如下所示:

<path id="compile.classpath">
    <fileset dir="lib" includes="**/*.jar"/>
</path>

然后,您可以在javac任务中使用创建的路径代替当前的类路径。

<classpath refid="compile.classpath"/>

然后,您可以使用该路径设置manifestclasspath。

<target name="jar" depends="compile">
    <manifestclasspath property="jar.classpath" jarfile="build\jar\MyJar.jar">
      <classpath refid="compile.classpath"/>
    </manifestclasspath>    
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" >
        <manifest>
            <attribute name="Built-By" value="${user.name}" />
            <attribute name="Class-Path" value="${jar.classpath}"/>
        </manifest>
    </jar>
</target> 

manifestclasspath生成一个格式正确的类路径,用于清单文件,必须在72个字符后包装。如果不使用manifestclasspath任务,则包含许多jar文件或长路径的长类路径可能无法正常工作。

答案 1 :(得分:8)

查看我的NetBeans生成的构建文件,我在-do-jar-with-libraries任务中找到了这个代码段:

<manifest>
    <attribute name="Main-Class" value="${main.class}"/>
    <attribute name="Class-Path" value="${jar.classpath}"/>
</manifest>

换句话说,看起来您只需要为已有的清单任务添加另一个属性。

另请参阅Manifest Task documentation