簡體   English   中英

如何在JAR清單文件中指定類路徑的加載順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM