为了账号安全,请及时绑定邮箱和手机立即绑定

用蚂蚁创建一个捆绑罐

用蚂蚁创建一个捆绑罐

www说 2019-11-27 10:07:57
我正在使用Ant构建一些Java项目。在某些情况下,我有一个lib/目录,该目录包含JAR文件形式的外部依赖项。在构建期间,我通过将目录中zipfileset每个jar的a添加到bundle jar文件中,来创建一个捆绑jar,其中包含项目代码以及相关性lib/。问题是,每次添加一个jar或更改名称时,我都需要记住要更新build.xml文件,因为我找不到zipfilesets自动添加方式的方法,该方式将以特定模式包含所有jar(例如lib/*.jar)。有更好的方法吗?我已经考虑过为此编写自己的Ant任务,或者使用Groovy的ant API以编程方式进行此操作,但是我想知道是否存在使用“香草”蚂蚁进行此操作的方法。
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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


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


查看完整回答
反对 回复 2019-11-27
?
MM们

TA贡献1886条经验 获得超2个赞

使用zipgroupfileset。例如:


<target name="jar">

    <jar destfile="foo.jar" basedir="${dir.classes}">

        <zipgroupfileset dir="lib" includes="*.jar"/>

    </jar>

</target>


查看完整回答
反对 回复 2019-11-27
?
湖上湖

TA贡献2003条经验 获得超2个赞

对于那些使用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>

我已将此目标定义添加到build.xml文件的末尾。目标名称是-post-jar。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 334 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信