代码之家  ›  专栏  ›  技术社区  ›  abyx

使用ant创建捆绑jar

  •  60
  • abyx  · 技术社区  · 15 年前


    在某些情况下,我有一个 lib/ 目录,其中包含外部依赖项,格式为JAR文件。

    在构建过程中,我通过在bundle jar文件中添加一个 zipfileset 对于容器中的每个罐子 目录

    问题是,每次我添加jar或更改名称时,我都需要记住更新 build.xml 文件,因为我找不到添加这些文件的方法 zipfilesets 以自动方式包括特定模式中的所有罐子(例如。 lib/*.jar

    有更好的方法吗?

    我曾经考虑过为此编写自己的Ant任务,或者使用Groovy的Ant API以编程方式完成这项工作,但是我想知道是否有一种方法可以使用“香草”Ant完成这项工作。

    4 回复  |  直到 8 年前
        1
  •  57
  •   jonescb Denis    15 年前

    在我的目标中,我有如下内容:

    <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>
    

    这部分我是从别的地方抄来的,所以我对它不太熟悉。

    快速编辑。

    <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>
    
        2
  •  32
  •   martin clayton egrunin    14 年前

    使用 zipgroupfileset

    <target name="jar">
        <jar destfile="foo.jar" basedir="${dir.classes}">
            <zipgroupfileset dir="lib" includes="*.jar"/>
        </jar>
    </target>
    

    这个 Zip

        3
  •  10
  •   user725434 user725434    12 年前

    对于使用NetBeans的用户,这里介绍了如何使用zipgroupfileset绑定的库创建JAR归档:

    <target name="-post-jar">
    
        <property name="store.jar.name" value="MyJarName"/>
    
        <property name="store.dir" value="dist"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
    
        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
    
        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
            <zipgroupfileset dir="dist" includes="*.jar"/>
            <zipgroupfileset dir="dist/lib" includes="*.jar"/>
    
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
        </jar>
    
        <zip destfile="${store.jar}">
            <zipfileset src="${store.dir}/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>
    
        <delete file="${store.dir}/temp_final.jar"/>
        <delete dir="${store.dir}/lib"/>
        <delete file="${store.dir}/README.TXT"/>
    </target>
    

        4
  •  0
  •   Upgradingdave    15 年前

    下面是一个简单的ant目标示例,它将创建一个包含lib目录下所有jar文件的jar(名为test.jar)。也许这能解决你的问题?

    <target name="jar">
        <jar destfile="test.jar">
            <fileset dir="lib/" includes="**/*.jar" />
        </jar>
    </target>