用蚂蚁创建捆绑包jar
我使用Ant来构建一些Java项目。
在某些情况下,我在JAR文件的表单中有一个包含外部依赖关系的lib/
目录。用蚂蚁创建捆绑包jar
在构建,我创建了一个捆绑的罐子,包含项目的代码,依赖一起,加入到包JAR文件中的每个lib/
目录罐子的zipfileset
。
问题是,每当我添加一个jar或更改名称时,我都需要记住更新build.xml
文件,因为我找不到以自动方式添加这些zipfilesets
的方法,其中包括所有罐子在一定的模式(例如lib/*.jar
)。
有没有更好的方法来做到这一点?
我已经考虑为此编写我自己的Ant任务,或者使用Groovy的ant API以编程方式执行此操作,但想知道是否有使用“vanilla”ant的方法。
在我的目标,我有这样的事情:
<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从张贴的包目标使用以上。 这部分我从其他地方复制过,所以我并不是那么熟悉它。
快速编辑。 Java3c需要了解这些罐子。
<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>
下面是一个ant目标的简单示例,它将创建一个jar包(名为test.jar),该jar包含lib目录下的所有jar文件。也许这会解决你的问题?
<target name="jar">
<jar destfile="test.jar">
<fileset dir="lib/" includes="**/*.jar" />
</jar>
</target>
罐子文件是否可以嵌套?你确定这会起作用吗? – abyx
嗯,我想不是,我在想战争和webapps而不是罐子,对不起'回合。 – Upgradingdave
使用zipgroupfileset
。例如:
<target name="jar">
<jar destfile="foo.jar" basedir="${dir.classes}">
<zipgroupfileset dir="lib" includes="*.jar"/>
</jar>
</target>
的zipgroupfileset
是记录与Zip任务。
对于那些你使用NetBeans在这里的是如何创建与库JAR档案使用zipgroupfileset捆绑:
<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。
下面是一个类似于jonescb的方法,它包含最终的'build.xml'(大图),这个答案中缺少这个方法:http://www.mkyong.com/ant/ant-create-a-fat-jar文件/ – Stephan