2011-11-29 22 views
0

我有一個Java項目Parent,它依賴於Child子項目(以JAR的形式)。這Child取決於庫AB和那些與Child捆綁在一起。 Parent使用AB以及(意思是直接調用,通過Child不是間接的。我希望能夠在我的項目包括:AB JAR文件只有一次。編譯使用螞蟻的嵌套罐子

當我編譯Parent,我得到一個cannot find symbol時。引用庫AB我相信這是因爲Child是編譯時的道路上,但由於某種原因在它的庫不

我使用螞蟻作爲我的建築工具 - 有什麼特別的,我應該是在我的javac標籤中嵌套jar嗎?現在在Parent'小號的build.xml我:

<target name="compile" depends="clean, makedir"> 
    <javac 
     srcdir="${src.dir}" 
     destdir="${build.dir}" 
     includeantruntime="false" 
     classpathref="build.classpath"> 
    </javac> 
</target> 

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

這應包括所有出現在我的lib文件夾罐子,但它似乎不包括罐中的所有罐子。

回答

1

我假設A.jarB.jar是第三方庫,而不是您自己構建的輸出。

在這種情況下,解決此問題的一種方法是爲第三方庫創建項目或目錄,然後可以將其用於多個項目。在你所描述的環境中,你的Child項目將把它們捆綁到它自己的構建輸出中,並且Parent項目將直接在它的類路徑中使用它們。

比方說,你在文件系統中的同一級別的其他項目創建thirdparty項目:

thirdparty 
    lib 
     A.jar 
     B.jar 
    Parent 
    build.xml 
    src 
    Child 
    build.xml 
    src 

在你的構建文件,你可以定義第三方項目位置:

<property name="thirdparty" value="../thirdparty"/> 

和引用它在路徑:

<include name="${thirdparty}/lib/A.jar"/> 
<include name="${thirdparty}/lib/B.jar"/>