我想使用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
。我想让它生成我的类并提取依赖项。
有人能帮忙吗?
我通过将依赖项提取到TMP目录,然后将两个目录(src &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>
将lib文件夹中的所有jar解压到某个临时文件夹中(使用unjar任务),然后通过将该临时文件夹添加为文件集来创建engine.jar。
就像你手工做一样
由于
,您可以将依赖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>
这将直接从ivy缓存中读取jar,您不需要先将它们retrieve
到本地lib
目录中。