【发布时间】:2014-02-13 15:02:46
【问题描述】:
我有一个用于 java 项目的 Apache 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 没有任何错误或问题,所以我认为类路径是正确的。如果我从 Ant 运行 javac 命令,当他尝试编译 A.java 时,它会给我一个错误提示:
找不到符号 B.java
在我的 javac 命令中,我设置了一个源目录 = docroot/WEB-INF/src。如果我还将 docroot/WEB-INF/service 设置为源目录,它就可以工作。但是这个解决方案的问题是:一些子项目只有一个源文件夹,“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文件。 -
我不知道你在这里做什么,但我可以肯定地说一件事:你不要将源文件放在 WEB-INF 文件夹中。该目录仅用于可部署文件(/lib 中的 jar 文件、/class 中的类文件、WEB-INF 本身中的配置文件)。
-
@hmjd 你想要构建文件中的特定目标吗?因为我的构建文件有数百行。整个 Ant 进程由不同的构建文件组成..
-
@Gimby 我明白你在告诉我什么,但是这个项目是一个已知软件的扩展,它遵循推荐的结构......
-
@PauloRodrigues,建议创建一个小的
build.xml,其中包含javac命令的必要元素。您可能会因为创建较小的构建文件而自己发现问题。
标签: java ant build-process