gpt4 book ai didi

java - 如何在 JAR list 文件中指定类路径加载顺序

转载 作者:行者123 更新时间:2023-11-30 03:36:13 25 4
gpt4 key购买 nike

我正在使用 Ant 制作 JAR 文件,但我需要为 Manifyst 文件中生成的 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>

现在这是类路径属性:

<manifestclasspath property="lib.list" jarfile="${dist.dir}/${jar.name}_${major.version.number}.${minor.version.number}.${revision.number}.jar">
<classpath refid="manifest.classpath" />
</manifestclasspath>

这是 list .classpath:

<!-- Manifest classpaht -->
<path id="manifest.classpath">
<fileset dir="${dist.dir}/lib">
<include name="*.jar"/>
</fileset>
</path>

对我来说,看起来我必须在上面手动一一定义每个库,而不是使用通配符......但是之后会保持该顺序吗?

谢谢!亚历杭德罗

最佳答案

定义类路径时,您可以在该路径中复制 jar,就像您可以在 $PATH 中复制目录一样。虽然很马虎,但也不错:

PATH="/bin:/usr/bin:$HOME/bin:/usr/local/bin:/bin"

/bin 目录指定了两次,但这并不重要。如果我指定 ls$PATH/bin 的第一个实例将会找到它。我的 $PATH 中的最后一个 /bin 实例没有执行任何操作。重复并没有造成真正的伤害。

如果您需要指定某些 jar 必须位于第一个的类路径,那么首先指定您需要的内容。如果 $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>

关于java - 如何在 JAR list 文件中指定类路径加载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27841756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com