2011-08-30 69 views
0

我是Apache Ant新手,我想創建一個包含運行任務的構建文件。運行任務需要執行下面的命令行statemenetApache Ant中的java任務問題

java -classpath C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar sys.ctx.doodle.Start 

其中sys.ctx.doodle.Start類位於doodle.jar

我的問題是:我怎麼能在添加兩個元素類路徑? 我曾嘗試以下:

<target name="run"> 
    <java jar="C:/tmp/SYS/doodle.jar" fork="true"> 
    <classpath> 
     <pathelement location="C:/tmp/SYS/doodle.jar"/> 
     <pathelement path="sys.ctx.doodle.Start"/> 
    </classpath> 
    <classpath> 
     <pathelement location="C:/tmp/SYS/CTX.jar"/> 
    </classpath> 
    </java> 
</target> 

但在執行它拋出我java.lang.NoClassDefFoundError

任何想法,問題可能是什麼時候?

回答

2

您可以直接將命令行路徑轉置到Ant java task classpath屬性中。 Ant應該注意識別由分號分隔的jar名稱組成。

<java classpath="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar" ... > 

或者你可以指定它爲你目前有一個嵌套的元素:

<java ... > 
    <classpath> 
     <pathelement path="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar" /> 
    </classpath> 
</java> 

的參數sys.ctx.doodle.Start看起來像你想運行的類的名稱。使用classname屬性將其傳遞給java任務。把與類路徑導致:

<java classpath="C:/tmp/SYS/doodle.jar;C:/tmp/SYS/CTX.jar" 
     classname="sys.ctx.doodle.Start" /> 

jar屬性應該只有當你想運行包含在該JAR的Main-Class使用。

0

您有太多<classpath>元素。你需要的是一個<classpath>元素是這樣的:

<classpath> 
     <pathelement location="C:/tmp/SYS/doodle.jar"/> 
     <pathelement location="C:/tmp/SYS/CTX.jar"/> 
    </classpath> 

你需要改變<java>標籤是這樣的:

<java jar="C:/tmp/SYS/doodle.jar" fork="true" classname="sys.ctx.doodle.Start"> 
2

對於使用添加多個罐子到類路徑參考Fileset似乎是一個乾淨的方式做到這一點

例如:

<classpath> 
    <pathelement path="${classpath}"/> 
    <fileset dir="lib"> 
    <include name="*.jar"/> 
    </fileset> 
</classpath> 

將lib目錄中的所有jar添加到類路徑中。

+0

Anto這可能是更好的方法。將需要在類路徑中的庫添加到lib目錄中,然後將上面的代碼放到build.xml中。 – Mohyt