2015-11-24 143 views
0

使用ant編譯(ant compile)項目,其中需要將多個src文件夾分別構建到各自的classes文件夾中。例如:運行ant編譯時,「包*不存在」

. 
|-- classes1/com 
| `-- A.class 
|-- classes2/com 
| `-- B.class 
|-- src1/com 
| `-- A.java 
`-- src2/com 
    `-- B.java 

,我快到的問題是,B.java使用在A.java定義的類,並編譯B.java時,它拋出package com.A does not exist

這裏是我的螞蟻片段是什麼樣子:

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

<target name="compile"> 
    <javac srcdir="src1" destdir="classes1" includeantruntime="false"> 
     <classpath refid="classpath" /> 
    </javac> 
    <javac srcdir="src2" destdir="classes2" includeantruntime="false"> 
     <classpath refid="classpath" /> 
    </javac> 
</target> 

當我運行ant -v compile我甚至可以看到classes1/COM /的A.class在classpath

回答

0

問題可能是路正在建立路徑classpath。我想這個目錄「。」是包含classes1classes2的文件夾。在這種情況下,「com.A」類確實是「classes1.com.A」。 文件集應該有兩個不同的路徑(一個用於每個文件夾),如:

<path id="classpath"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <fileset dir="classes1"> 
     <include name="**/*.class" /> 
    </fileset> 
    <fileset dir="classes2"> 
     <include name="**/*.class" /> 
    </fileset> 
</path> 

這種方式,基部文件夾將是「classes1」和「classes2」,而不是親本。

+0

還是同樣的事情 –

1

首先,每個編譯都有一個稍微不同的類路徑,因此爲了清晰起見,請將它們分開。其次,jar分別在類路徑中列出,而類則通過其基目錄引用。

嘗試以下操作:

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

<path id="compileB"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <pathelement location="classes1"/> 
</path> 

<target name="compile"> 
    <javac srcdir="src1" destdir="classes1" includeantruntime="false" classpathref="compileA"/> 
    <javac srcdir="src2" destdir="classes2" includeantruntime="false" classpathref="compileB"/> 
</target> 
+0

哦,是的。我忘了那個。 @Kyle Schustak,你可能想看看http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html。 – Berne