不能通过蚂蚁制作带有依赖关系的jar

时间:2013-06-01 17:11:36

标签: ant jar

我想使用ant构建我的项目,但我遇到了一个小问题。我的问题是我需要输出jar让我的所有.class和我的jar所有依赖关系提取而不是压缩

<project name="ivy example" default="compress" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="resolve" description="Resolve and retrieve with ivy">
        <ivy:resolve />
        <ivy:cachepath pathid="compile.path" />
    </target>

    <target name="compile" depends="resolve" description="compilation">
       <mkdir dir="build/classes" />
       <javac srcdir="src" destdir="build/classes">
           <classpath refid="compile.path" />
       </javac>
    </target>

    <target name="compress"  depends="compile">
        <jar destfile="output/engine.jar" filesonly="true" update="true">
        <fileset dir="build/classes" />
        <fileset dir="lib"/>
            <manifest>
                <attribute name="Created-By" value="vireton"/>
                <attribute name="Main-Class" value="HelloIvy"/>
            </manifest>
        </jar>
        <echo>Building .jar file completed successfully!</echo>
    </target>

</project>

该代码使用输出engine.jar + classes生成我的dependencies.jar。 我想让它生成我的类和提取的依赖项。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我是通过将依赖项提取到tmp目录然后制作两个目录的jar(src&amp; tmp)

来实现的。
  <target name="compress"  depends="compile">
<delete file="output/engine.jar" />
    <mkdir dir="tmp" />
    <unzip dest="tmp">
        <fileset dir="lib"> 
            <include name="*.jar" />
        </fileset>
    </unzip>
            <delete dir="tmp/META-INF" />
        <jar destfile="output/engine.jar" update="true">
        <fileset dir="build/classes" />
        <fileset dir="tmp"/>
            <manifest>
              <attribute name="Created-By" value="vireton"/>
              <attribute name="Main-Class" value="HelloIvy"/>
            </manifest>         
    </jar>  
     </target>

我找到了一种更好的方法来使用

 <target name="compress"  depends="compile">
     <delete file="output/engine.jar" />
        <jar destfile="output/engine.jar" update="true">
        <zipgroupfileset dir="lib" includes="*.jar"/>
        <zipfileset dir="build/classes" />          
    </jar>  
   </target>

答案 1 :(得分:0)

将lib文件夹的所有jar解压缩到一些临时文件夹(使用unjar任务),然后通过将此临时文件夹添加为文件集来创建engine.jar。

就像你手工做的那样。

答案 2 :(得分:0)

由于

,您的依赖jar文件可用作路径
    <ivy:cachepath pathid="compile.path" />

所以将它们全部捆绑到最终jar中的最简单方法是(假设Ant 1.8或更高版本)

  <jar destfile="output/engine.jar" filesonly="true" update="true">
    <fileset dir="build/classes" />
    <archives>
      <zips>
        <path refid="compile.path"/>
      </zips>
    </archives>
    <manifest>
        <attribute name="Created-By" value="vireton"/>
        <attribute name="Main-Class" value="HelloIvy"/>
    </manifest>
  </jar>

这将直接从您的常春藤缓存读取jar,您不需要retrieve首先将它们放入本地lib目录。