我正在使用Ant构建一些Java项目。在某些情况下,我有一个lib/目录,该目录包含JAR文件形式的外部依赖项。
在构建过程中,我通过将目录中zipfileset每个jar的a添加到bundlejar文件中,创建了一个捆绑jar,其中包含项目代码以及相关性lib/。
问题是,每次添加一个jar或更改名称时,我都需要记住要更新build.xml文,因为我找不到zipfilesets一种自动添加方式的方式,该方式将以某种特定模式包含所有jar(例如lib/*.jar)。
lib/*.jar
有更好的方法吗?
我考虑过为此编写自己的Ant任务,或者使用Groovy的antAPI以编程方式进行此操作,但是我想知道是否存在使用“香草”蚂蚁进行此操作的方法。
在我的目标中,我有这样的东西:
<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。这部分是我从其他地方复制的,所以我并不那么熟悉。
快速编辑。Javac也需要了解这些jar。
<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>