使用常春藤在ant中构建一个“胖罐”而不将jar复制到lib目录

时间:2010-12-18 20:34:41

标签: ant ivy

我很有兴趣在我的Java项目中构建一个“胖罐子”,其中Ivy解析了依赖项。我必须将引用的jar文件从常春藤缓存复制到本地项目对我来说似乎很浪费,所以我想避免这样做。我找到了一个有效的解决方案,但想知道是否有一个稍微简单的方法。在下面的代码中我认为最简单的方法是使zipfileset行工作,但它没有 - jar包含在构建的jar文件中,但它们不会被扩展。如果相反我使用它正常工作的部分,但似乎有点大惊小怪。有没有更简洁的方法呢?

<target depends="clean, build" name="jar">
    <ivy:cachefileset setid="Ping.runclasspath" conf="default" />
    <jar destfile="dist/Ping.jar" filesetmanifest="mergewithoutmain">
        <manifest>
            <attribute name="Main-Class" value="${main-class}"/>
            <attribute name="Class-Path" value="."/>
        </manifest>
        <fileset dir="build"/>
        <zipfileset refid="Ping.runclasspath"/>      <--- this does NOT work
        <restrict>                                   <--- this DOES work
           <name name="**/*.class"/>
           <archives>
              <zips>
                 <fileset refid="Ping.runclasspath"/>
              </zips>
           </archives>
        </restrict>
    </jar>
</target>

2 个答案:

答案 0 :(得分:2)

您是否尝试过zipgroupfileset?我不知道它是否会在你的例子中起作用,但它似乎有一个类似的存在目的。

答案 1 :(得分:1)

我必须在我的一个蚂蚁项目中做同样的事情。 Chris建议使用zipgroupfileset作品:

<target depends="clean, build" name="jar">
    <ivy:cachefileset setid="Ping.runclasspath" conf="default" />
    <jar destfile="dist/Ping.jar" filesetmanifest="mergewithoutmain">
        <manifest>
            <attribute name="Main-Class" value="${main-class}"/>
            <attribute name="Class-Path" value="."/>
        </manifest>
        <fileset dir="build"/>
        <zipgroupfileset refid="Ping.runclasspath"/>
    </jar>
</target>