2014-08-27 60 views
2

使用Ant時遇到以下問題。Ant-Pathelement with wildcard only only in Javac forked mode

我的Ant腳本片段:

<path id="id.compile.classpath"> 
    <pathelement location="src/compile_lib1/*" /> 
    <pathelement location="src/compile_lib2/*" /> 
</path> 

<javac srcdir="${module.root}/${src.root}" destdir="${swap.target.classes}" 
    nowarn="${javac.nowarn}" debug="${javac.debug}" fork="${javac.fork}" 
    classpathref="id.compile.classpath" includeAntRuntime="${javac.includeAntRuntime}"> 
    <include name="**/*.java"/> 
</javac> 

當設置叉javac任務=」真」,通配符pathelement工作正常,但分叉設置爲false時,螞蟻似乎未能正確解釋通配符。 (編譯失敗,由於類路徑錯誤)。

任何建議
謝謝。

回答

6

不是使用通配符pathelement,而是使用fileset並讓Ant爲您擴展通配符。

<path id="id.compile.classpath"> 
    <fileset dir="src/compile_lib1" includes="*.jar" /> 
    <fileset dir="src/compile_lib2" includes="*.jar" /> 
</path> 
+0

明白,只是想知道爲什麼不我的情況 – foolhunger 2014-08-27 16:39:49

+0

@foolhunger Java的工作不支持通配符在classpath中,同樣沒有ANT。請參閱:http://ant.apache.org/manual/using.html#path – 2014-08-27 16:58:43

+1

@foolhunger關於[有關類路徑的Oracle文檔]中的通配符部分(http://docs.oracle.com/javase/7/docs /technotes/tools/solaris/classpath.html)表示:「擴展通配符在調用程序的主要方法之前就已經提前完成了,而不是在類加載過程本身的晚期完成」 - 這表明在分叉模式JVM啓動器將擴展通配符並將擴展版本的路徑傳遞給編譯器類。在非分叉模式下,這種情況不會發生,編譯器會看到它不知道如何處理的文字「*」。 – 2014-08-27 17:00:08