我有一個Apache Ant構建文件,用於包含javac命令以編譯我的源代碼的java項目。這個項目有一些特殊的限制,它由小的子項目組成。大多數這些子項目具有以下文件夾結構:Ant javac源碼目錄不工作
/docroot
----/WEB-INF
--------/lib
--------/src
-----------A.java
----------- ... (more java classes)
--------/service
-----------B.java
----------- ... (more java classes)
src和service都是源文件夾。 A.java會導入位於/ service文件夾中的一些類,例如B.java。在eclipse中一切正常,A.java導入B.java沒有任何錯誤或問題,所以我認爲classpath是正確的。如果我運行從螞蟻,當他試圖編譯A.java它給了我一個錯誤說javac命令:
找不到符號B.java
在我的javac命令我設置單個源目錄= docroot/WEB-INF/src。如果我還將docroot/WEB-INF /服務設置爲源目錄,它也可以工作。但是這裏有這個解決方案的問題:一些子項目只有一個源文件夾「docroot/WEB-INF/src」。這意味着如果我爲javac命令設置了兩個源目錄,對於具有單個源目錄「docroot/WEB-INF/src」的項目,它會拋出一個錯誤,指出子項目沒有文件夾「docroot/WEB -INF /服務」。
我該如何解決這個問題?
<antcall target="compile-java">
<param name="javac.classpathref" value="plugin.classpath" />
<param name="javac.destdir" value="docroot/WEB-INF/classes" />
<param name="javac.srcdir" value="docroot/WEB-INF/src" />
<reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
</antcall>
<target name="compile-java">
<javac
classpathref="${javac.classpathref}"
compiler="${javac.compiler}"
debug="${javac.debug}"
deprecation="${javac.deprecation}"
destdir="${javac.destdir}"
fork="${javac.fork}"
includeAntRuntime="false"
memoryMaximumSize="${javac.memoryMaximumSize}"
nowarn="${javac.nowarn}"
encoding="${javac.encoding}"
>
<src path="${javac.srcdir}"/>
</javac>
<copy todir="${javac.destdir}">
<fileset dir="${javac.srcdir}" excludes="**/*.java" />
</copy>
</target>
發佈您的'build.xml'文件。 – hmjd
我不知道你在這裏做什麼,但我可以絕對肯定地說一件事:你不要把源文件放在WEB-INF文件夾中。該目錄僅用於可部署(僅限於/ lib中的jar文件,/ class中的類文件,WEB-INF本身中的配置文件)。 – Gimby
@hmjd你想從構建文件中的特定目標?因爲我的構建文件有數百行。並且整個Ant過程由diferente構建文件組成.. –