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