[英]How do I specify a directory for properties files in a jar manifest classpath?
[英]How to specify classpath loading order in a JAR manifest file
我正在使用Ant制作JAR文件,但是我需要為在Manifiedt文件中生成的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>
在我看來,我必須手動在每個庫上手動定義一個庫,而不是使用通配符...但是此順序會在以后得到嗎?
謝謝! 亞歷杭德羅
定義類路徑時,可以在該路徑中復制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>
據我所知,清單中的類路徑將使用與您提供它們相同的順序來排序。 我知道它在Maven中是這樣工作的,並且可以肯定,在Ant中也是如此,因此您可以做的是首先提供“關鍵”條目-然后放入通配符,從而提供所需的順序-而無需手動定義所有必需的依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.