小编典典

用ant创建一个捆绑罐

javascript java

我正在使用Ant构建一些Java项目。在某些情况下,我有一个lib/目录,该目录包含JAR文件形式的外部依赖项。

在构建过程中,我通过将目录中zipfileset每个jar的a添加到bundlejar文件中,创建了一个捆绑jar,其中包含项目代码以及相关性lib/。

问题是,每次添加一个jar或更改名称时,我都需要记住要更新build.xml文,因为我找不到zipfilesets一种自动添加方式的方式,该方式将以某种特定模式包含所有jar(例如lib/*.jar)。

有更好的方法吗?

我考虑过为此编写自己的Ant任务,或者使用Groovy的antAPI以编程方式进行此操作,但是我想知道是否存在使用“香草”蚂蚁进行此操作的方法。


阅读 252

收藏
2020-09-18

共1个答案

小编典典

在我的目标中,我有这样的东西:

<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
    <zipgroupfileset dir="dist" includes="*.jar"/>
    <zipgroupfileset dir="dist/lib" includes="*.jar" excludes=""/>

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

这是我如何构建我的类路径:

<path id="build.classpath">
    <fileset dir="${basedir}/">
        <include name="${lib.dir}/*.jar"/>
    </fileset>
</path>

<pathconvert property="mf.classpath" pathsep=" ">
    <path refid="build.classpath"/>
    <mapper>
        <chainedmapper>
            <flattenmapper/>
            <globmapper from="*.jar" to="lib/*.jar"/>
        </chainedmapper>
    </mapper>
</pathconvert>

从上面发布的包目标中使用mf.classpath。这部分是我从其他地方复制的,所以我并不那么熟悉。

快速编辑。Javac也需要了解这些jar。

<path id="jars">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<target name="compile">
    <mkdir dir="${build.dir}"/>
    <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="jars" debug="on"/>
</target>
2020-09-18