简体   繁体   English

Apache ant清单类路径?

[英]Apache ant manifest class-path?

I have a standard project layout for a java project: 我有一个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

As far as I can tell, I am building the project correctly with Ant. 据我所知,我正在使用Ant正确构建项目。 I need to set the class-path attribute in the Manifest file so my classes can use the required libraries. 我需要在Manifest文件中设置class-path属性,以便我的类可以使用所需的库。

The following relevant information from build.xml 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>

Any push in the right direction is appreciated. 任何正确方向的推动都值得赞赏。 Thanks 谢谢

Assuming the libraries do not change location from compiling to executing the jar file, you could create a path element to your classpath outside of the compile target like so: 假设库不会将位置从编译更改为执行jar文件,您可以在编译目标之外的类路径中创建一个路径元素,如下所示:

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

Then you can use the created path inside your javac task in place of your current classpath. 然后,您可以使用javac任务中创建的路径代替当前的类路径。

<classpath refid="compile.classpath"/>

You can then use the path to set a manifestclasspath. 然后,您可以使用该路径设置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> 

The manifestclasspath generates a properly formatted classpath for use in manifest file which must be wrapped after 72 characters. manifestclasspath生成一个格式正确的类路径,用于清单文件,必须在72个字符后包装。 Long classpaths that contain many jar files or long paths may not work correctly without using the manifestclasspath task. 如果不使用manifestclasspath任务,则包含许多jar文件或长路径的长类路径可能无法正常工作。

Looking at my NetBeans-generated build file, I found this snippet in the -do-jar-with-libraries task: 查看我的NetBeans生成的构建文件,我在-do-jar-with-libraries任务中找到了这个代码段:

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

So in other words, it looks like you just need to add another attribute to the manifest task that you already have. 换句话说,看起来您只需要为已有的清单任务添加另一个属性。

See also the Manifest Task documentation . 另请参阅Manifest Task文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM