소스 코드를 컴파일하는 javac 명령이 포함 된 Java 프로젝트 용 Apache Ant 빌드 파일이 있습니다. 이 프로젝트는 몇 가지 특별한 제약이 있으며 작은 하위 프로젝트로 구성됩니다. 이러한 하위 프로젝트의 대부분은 다음 폴더 구조를 가지고 있습니다.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)를 가져옵니다. 이클립스에서 모든 것이 잘 작동하면 A.java는 오류나 문제없이 B.java를 가져 오므로 classpath가 맞다고 가정합니다. 나는 그가 그 말을 나에게 오류를 제공 A.java를 컴파일하려고 개미에서 javac의 명령을 실행하면 :
내 javac의 명령에 내가하고 있어요을 상징 B.java
을 찾을 수 없습니다 단일 소스 디렉토리 = docroot/WEB-INF/src. docroot/WEB-INF/service도 소스 디렉토리로 설정하면 작동합니다. 그러나이 솔루션의 문제점은 다음과 같습니다. 일부 하위 프로젝트에는 단일 원본 폴더 인 "docroot/WEB-INF/src"만 있습니다. 즉, 하나의 소스 디렉토리 "docroot/WEB-INF/src"가있는 프로젝트에 대해 javac 명령에 대해 두 개의 소스 디렉토리를 설정하면 하위 프로젝트에 "docroot/WEB"폴더가 없다는 오류가 발생합니다 -INF/service "를 입력하십시오.
이 문제를 어떻게 해결할 수 있습니까?
<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 폴더에 넣지 않는다는 것입니다. 이 디렉토리는 deployable (/ lib의 jar 파일,/class의 클래스 파일, WEB-INF 자체의 구성 파일) 용입니다. – Gimby
@hmjd 빌드 파일에서 특정 대상을 원하십니까? 내 빌드 파일에는 수백 개의 행이 있기 때문입니다. 그리고 전체 Ant 프로세스는 다른 빌드 파일로 구성됩니다. –