我正在使用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>
对我而言,我似乎必须在上面逐个手动定义每个库,而不是使用通配符......但是之后该命令会被提供吗?
谢谢! 亚历
答案 0 :(得分:2)
定义类路径时,可以复制该路径中的jar,就像在$PATH
中复制目录一样。这很草率,但也不错:
PATH="/bin:/usr/bin:$HOME/bin:/usr/local/bin:/bin"
/bin
目录被指定两次,但这无关紧要。如果我指定ls
,我/bin
中的$PATH
的第一个实例会找到它。我/bin
中$PATH
的最后一个实例没有做任何事情。复制没有造成真正的伤害。
如果您需要指定某个罐子必须是第一个的类路径,那么请先指定您需要的内容。如果$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>
答案 1 :(得分:0)
据我所知,清单中的类路径将按照您提供的顺序排列的条目定义。我知道它在Maven中的效果是这样的,并且非常确定在Ant中也是如此,所以你能做的就是提供&#34; critical&#34;条目首先 - 然后放入通配符,从而提供所需的订单 - 而不是手动定义所有必需的依赖项。