我正在使用Ant创建一个JAR文件,但我需要为Manifiest文件中生成的JAR文件指定类路径加载顺序。
之所以出现这种情况,是因为我所使用的一些依赖项使用了另一个库的不同版本,而且我需要确保加载了最新版本的库。使用Eclipse接口很容易,但我不知道如何使用Ant来实现这一点。
这就是我现在为JAR任务准备的内容:
<target depends="build-project" name="jar">
<!-- Get the timestamp -->
<set.timestamp/>
<!-- Create our own manifest file for our JAR -->
<manifest file="MANIFEST.MF">
<attribute name="Built-By" value="${username} - ${company.name}"/>
<attribute name="Main-Class" value="some.package.Main"/>
<attribute name="Class-path" value=". ${lib.list}"/>
<attribute name="Implementation-Version"
value="${major.version.number}.${minor.version.number}.${revision.number}"/>
<attribute name="Built-Date" value="${current.time}"/>
</manifest>
<jar whenmanifestonly="fail" destfile="${dist.dir}/${jar.name}_${major.version.number}.${minor.version.number}.${revision.number}.jar" manifest="MANIFEST.MF">
</target>现在这是Classpath属性:
<manifestclasspath property="lib.list" jarfile="${dist.dir}/${jar.name}_${major.version.number}.${minor.version.number}.${revision.number}.jar">
<classpath refid="manifest.classpath" />
</manifestclasspath>这是manifest.classpath:
<!-- Manifest classpaht -->
<path id="manifest.classpath">
<fileset dir="${dist.dir}/lib">
<include name="*.jar"/>
</fileset>
</path>在我看来,这看起来像是我必须手动定义上面的每个库,而不是使用一个wildcard...but,这样的顺序会在之后完成吗?
谢谢!亚历杭德罗
发布于 2015-01-08 14:53:55
定义类路径时,可以在该路径中复制jars,就像在$PATH中复制目录一样。这很草率,但也不错:
PATH="/bin:/usr/bin:$HOME/bin:/usr/local/bin:/bin"/bin目录被指定了两次,但这并不重要。如果我指定了ls,/bin在我的$PATH中的第一个实例就会找到它。/bin在我的$PATH中的最后一个实例什么也不做。没有对重复造成真正的伤害。
如果您需要指定特定jars必须首先使用的类路径,那么首先指定您需要的是什么。如果$PATH再次包含特定的jar名称,那么这并不重要:
<path id="manifest.classpath">
<pathelement location="${first.jar}"/>
<pathelement location="${second.jar}"/>
<fileset dir="${manifest.jars.dir}"/>
</path>即使${first.jar}和${second.jar}在那个${manifest.jars.dir}中,也不重要。它们仍然会在你的道路上先被捡起来,然后在你的道路上被忽略。
现在,你可以这样做:
<manifestclasspath property="manifest.path">
<pathelement location="."/>
<classpath refid="manifest.classpath"/>
</manifestclasspath>最后:
<jar destdir="....">
<manifest>
<attribute name="Class-path" value="${manifest.path}"/>
...
</manifest>
</jar>发布于 2015-01-08 14:18:51
据我所知,清单中的类路径将与按您提供的顺序排序的条目一起定义。我知道它在Maven中是这样工作的,而且在Ant中也是如此,所以您可以做的是先提供“关键”条目,然后放入通配符,从而提供所需的顺序,而不是手动定义所有所需的依赖项。
https://stackoverflow.com/questions/27841756
复制相似问题