簡體   English   中英

如何在類路徑中使用ant包含多個jar?

[英]How can include multiple jars in the classpath using ant?

我在“src”文件夾中有一堆.java文件,這些文件依賴於“lib”文件夾中的三個jar。 我有以下build.xml文件:

<?xml version="1.0"?>
<project name="MyProj" basedir=".">
 <property name="src"   value="src"/>
 <property name="build" value="build"/>
 <property name="lib"   value="lib"/>


 <path id="master-classpath">
   <fileset dir="${lib}">
     <include name="activemq-all-5.1-SNAPSHOT.jar"/>
     <include name="geronimo-jms_1.1_spec-1.1.1.jar"/>
     <include name="activemq-core-5.3.0.jar"/>
   </fileset>
 </path>

 <javac destdir="${build}">
   <src path="${src}"/>
   <classpath refid="master-classpath"/>
 </javac>

</project>

編譯很好,但是當我嘗試並運行時,我得到了

“java.lang.NoClassDefFoundError:javax / jms / Destination”

但是,當我使用Eclipse在jar路徑中包含jar時,這個程序運行並編譯得很好。

編輯:所以我將jar復制到具有編譯類的文件夾中。 主方法的類是NDriver.class。 當我嘗試:

java -classpath ./geronimo-jms_1.1_spec-1.1.1.jar:./activemq-core-5.3.0.jar:./activemq-all-5.1-SNAPSHOT.jar NDriver

這給出了:

線程“main”中的異常java.lang.NoClassDefFoundError:NDriver

我很感激任何幫助。

運行應用程序時,需要將編譯時使用的jar放在類路徑 遺憾的是,您沒有提供有關如何實際運行它的任何細節,因此很難提供更多指導。

更新:包含已編譯類的目錄也需要添加到類路徑中。 如果從包含已編譯類的目錄啟動java ,則可以使用. 指定當前目錄。 將它添加到類路徑中,如下所示,告訴java也在那里查找類(我已經添加.activemq-all-5.1-SNAPSHOT.jar ):

java -classpath ./geronimo-jms_1.1_spec-1.1.1.jar:./activemq-core-5.3.0.jar:./activemq-all-5.1-SNAPSHOT.jar:. NDriver

一種方式(與你的變量略有不同)

<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<manifestclasspath property="manifest.classpath" jarfile="${jarfile}">
    <classpath refid="classpath"/>
</manifestclasspath>

<target name="jar" depends="compile" description="create the jar">
    <jar destfile="${jarfile}" basedir="${build.dir}">
        <manifest>
            <attribute name="Manifest-Version" value="${manifest-version}"/>
            <attribute name="Created-By" value="${ant.java.version}"/>
            <attribute name="Main-Class" value="${main-class}"/>
            <attribute name="Class-Path" value="${manifest.classpath}"/>
        </manifest>
    </jar>
</target>

當然,我假設您正在創建一個jar並運行它(包括那里的類路徑)。 另一種選擇是使用一個run目標,該目標使用<java>標記並在那里顯式使用類路徑。

運行程序時,庫jar是否包含在類路徑中? Eclipse會自動添加這些,但您需要在從命令行運行程序時指定它們。

根據我的經驗,似乎Eclipse通常會在類路徑中包含類和jar,而不顯式使用類路徑聲明。 實際上,有時很難從Eclipse的構建中刪除類(它們必須被刪除或清除)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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