我想使用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
。
我想让它生成我的类和提取的依赖项。
有人可以帮忙吗?
答案 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
目录。