蚂蚁,jar文件和类路径哦我的

2022-09-02 00:51:50

我正在尝试重新构建我的构建技术,以创建依赖于常见的第三方jar文件的Java jar文件。(GlazedLists,Apache Commons等)

我一直把它们都放到{Java JRE dir}/lib/ext中,这样它们就会被JRE自动看到,但这导致了一些问题,比如不记得我需要分发某些jar文件,所以我想学习更明确。

所以我把它们都移到了c:\appl\java\common\中,把它们添加到Eclipse构建路径中,并在我的蚂蚁文件中定义了这一点:

<path id="javac_classpath">
    <fileset dir="${libDir}">
        <include name="*.jar"/>
    </fileset>
    <fileset dir="c:/appl/java/common">
        <include name="*.jar"/>
    </fileset>
</path>

我在任务中将类路径清单标头设置为“.”,但即使我将相关的jar文件放入与应用程序jar文件相同的目录中,这似乎也不起作用。我可以将它们一个接一个地手动添加到类路径标头中,但我想知道,有没有更简单的方法来正确设置类路径标头?jar


答案 1

这就是您所需要的:

<path id="build-classpath">
    <fileset dir="${dist}/lib">
        <include name="*.jar"/>
    </fileset>
</path>
<manifestclasspath property="lib.list" jarfile="${dist}/lib/myprog.jar">
    <classpath refid="build-classpath"/>
</manifestclasspath>
<jar jarfile="${dist}/lib/myprog.jar"
     basedir="${build}"
     includes="com/my/prog/**" >
    <manifest>
        <attribute name="Main-Class" value="com.my.prog.MyProg"/>
        <attribute name="Class-Path" value="${lib.list}"/>
    </manifest>
</jar>

正如您可能看到的,它假设您已经编译了Java类并将其输出到。它还假定您已将 jarfile 复制到 。${build}${dist}/lib

也就是说,值得研究其他内置依赖项支持的构建系统,例如Maven和Gradle。这些其他构建系统已经考虑了许多常见的项目结构和构建操作,因此您不必编写脚本,直到最后一个细节。


答案 2

你想要的是一个映射器。Flattenmapper可能是最简单的,但本质上你需要创建一个指定类路径的path元素,然后使用pathconvert将其转换为可以包含在清单中的字符串。

编辑:您可以使用包含规则来构建路径元素,因此以jar结尾的目录中的所有内容都将是**/*.jar


推荐