2012-10-01 49 views
0

我試圖讓Ant來編譯我的項目,它具有以下目錄結構的依賴關係:Ant的運行時類路徑找不到javac的

MyProject/ 
    src/main/java/ 
     com/ 
      <The rest of my source> 
    gen/ 
     bin/ 
      main/ 
       <Where I want all Java sources compiled to> 
    lib/ 
     main/ 
      <All of my dependencies> 
    build.xml 
    build.properties 

這裏是我的Ant任務:

<path id="src.main.java.path"> 
    <fileset dir="src/main/java"> 
     <include name="**.*java"/> 
    </fileset> 
</path> 

<path id="lib.main.path"> 
    <fileset dir="lib/main"> 
     <include name="**.*jar"/> 
    </fileset> 
</path> 

<target name="compile"> 
    <javac includeantruntime="true" srcdir="src/main/java" destdir="gen/bin/main"> 
     <!-- 
     Define a new classpath composed of all main Java sources and main Java dependencies, 
     and use them for this compilation. 
     --> 
     <classpath> 
      <pathelement path="src.main.java.path"/> 
      <pathelement path="lib.main.path"/> 
     </classpath> 
    </javac> 
</target> 

我應該提到build.xml位於項目根目錄,並且其basedir屬性設置爲"."(項目根目錄)。

當我運行「編譯」的任務,我拿到100+編譯器錯誤,它找不到任何我的項目依賴的(如吉斯,喬達時,XStream的,等等):

compile: 
    [javac] Compiling 53 source files to /<path-to-my-project-root>/MyProject/gen/bin/main 
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/Widget.java:37: package com.google.inject does not exist 
    [javac] import com.google.inject.AbstractModule; 
    [javac]      ^
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/MyWidget.java:45: cannot find symbol 
    [javac] symbol: class AbstractModule 
    [javac] public class AppUziContext extends AbstractModule { 
    [javac]    

BUILD FAILED 
/<path-to-my-project>/MyProject/build.xml:51: Compile failed; see the compiler error output for details. 

...這個列表有100多個錯誤,看起來像這樣,但對於找不到的每個依賴項都是不同的。

我相信問題在於我配置的路徑中的某處,並且在javac/classpath之內引用,但是在閱讀Ant文檔後,我無法弄清楚我要去哪裏。提前致謝!

回答

3

在你的目標試試這個:

<classpath> 
    <path refid="src.main.java.path"/> 
    <path refid="lib.main.path"/> 
</classpath> 

我通常做完整的類路徑的目標,然後使用一個班輪類路徑的目標之內:在目標

<path id="target.class.path"> 
    <path refid="src.main.java.path"/> 
    <path refid="lib.main.path"/> 
</path> 

然後:

<classpath refid="target.class.path"/> 

pathelement沒有很好的記錄,this是最好的,你會從螞蟻的網站。請注意,在這些示例中,<pathelement path=始終與屬性一起使用,否則它將採用實際的文件夾名稱(也可能是屬性)<pathelement location

+0

謝謝@ pb2q(+1) - 但那不是。我確實嘗試了你的建議,只是爲了排除它,但仍然得到了同樣的錯誤(確切地說)。如果你注意到,我沒有設置'src.main.java.path'或'lib.main.path'作爲屬性,我將它們定義在編譯目標之上並給它們賦予這些標籤。其他事情正在發生。再次感謝! – IAmYourFaja

相關問題