2013-07-19 5 views
0

나는 다음과 같은 디렉토리 구조를 가지고 컴파일되지 않는개미가 패키지가 존재하지 않는 이유는 무엇입니까?

MyApp/ 
    src/main/java/ 
     com/ 
      myapp/ 
       api/ 
        IFizz 
        FizzLoader 
       impl/ 
        core/ 
         FizzImpl 
        Cat 
        Dog 
        Tree 
        ...many other objects 
    src/test/java 
     ... 
    build/ 
    lib/ 
    ... 
난 단지뿐만 아니라 com.myapp.impl.core.FizzImplsrc/main/java/com/myapp/api 에서 모든 것을 컴파일 할

등이 Cat, Dog, Tree 등 (및 제외) . Ant 빌드에 의해

에서 (build.xml), 나는 main.compile.path 다음과 같은 구성 :

<path id="src.path"> 
    <fileset dir="src/main/java/com/myapp/api"> 
     <include name="**.*java"/> 
    </fileset> 
</path> 
<path id="lib.main.path"> 
    <fileset dir="lib/main"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 
<path id="main.compile.path"> 
    <path refid="src.path" /> 
    <path refid="lib.main.path" /> 
    <fileset dir="src/main/java" includes="com/myapp/impl/core/**/*" /> 
</path> 

그리고

다음 main-compile 대상 : 나는 main-compile을 실행하면

<target name="main-compile"> 
    <javac includeantruntime="false" srcdir="src/main/java/com/myapp/api" 
      destdir="gen/bin/main" debug="on"> 
     <classpath refid="main.compile.path"/> 
    </javac> 
</target> 

, 나는 다음과 같은 빌드 예외가 :

[javac] /home/myuser/eclipse/workspace/MyApp/src/main/java/com/myapp/api/FizzLoader.java:14: package com.myapp.impl.core does not exist 
[javac] import com.myapp.impl.core.FizzImpl; 
[javac] ...(omitting rest of trace but available upon request) 

여기에서 FizzLoaderFizzImpl의 인스턴스를 생성하므로 컴파일 경로에이 필드가 필요합니다.

왜 내가 main.compile.path에 선택적으로 추가 한 com.myapp.impl.core.FizzImpl을 Ant가 보지 못합니까? 미리 감사드립니다!

답변

1

javac의 클래스 경로는 컴파일 된 클래스 파일 트리의 루트를 포함하는 디렉토리 및 jar 파일을 참조해야합니다. Java 파일을 참조하면 안됩니다.

마찬가지로 소스 디렉토리는 소스 파일의 패키지 트리의 루트를 참조해야합니다. 패키지 트리에있는 패키지에 해당하는 디렉토리가 아닙니다.

귀하의 컴파일 작업은

<target name="main-compile"> 
    <javac includeantruntime="false" 
      srcdir="src/main/java" 
      destdir="${gen.bin.main.dir}" 
      debug="on" 
      includes="com/myapp/api/**/*.java, com/myapp/impl/core/FizzImpl/**/*.java"> 
     <classpath refid="lib.main.path"/> 
    </javac> 
</target> 
과 같아야합니다
관련 문제