2010-02-13 3 views
6

다양한 예제를 살펴본 결과 몇 가지 변형을 시도했지만 제대로 작동하지 않는 것으로 보입니다. javac를 사용하여 전체 디렉토리를 제외 할 수는 없지만 패키지를 지정할 수 없다는 것을 의미하는 파일 만 나타납니다. 다음은 내가 가지고있는 것입니다.Ant에서 javac를 사용하여 소스 패키지를 제외하는 방법은 무엇입니까?

<javac srcdir="src" destdir="WEB-INF/classes" excludes="path/to/excluded/package/*.java"> 
    <classpath refid="compile.classpath"/> <!-- reference defined earlier --> 
</javac> 

답변

11

"**"및 제외를 사용하여 전체 디렉토리 또는 디렉토리 트리를 제외 할 수 있습니다. 예

<dirset dir="aDirectory"> 
    <include name="a/package/**"/> 
    <exclude name="**/package/to/exclude**"/> 
</dirset> 
+0

중첩 된 dirset이 javac 작업과 작동하지 않습니다. –

+0

오른쪽.하지만 javac 작업의 참조 인 클래스 경로의 일부로 작동해야합니다. – akr

5

은 제외는 "SRC"의 경우 파일 중 하나를 작동하지 않습니다 유의하시기 바랍니다 제외에 지정된 파일의 종속성이 (지정된 경우 또는에서 "포함"). 먼저 제외 된 파일이 포함 파일에서 참조되지 않도록하십시오.

1

javac의 작업 implicity는 SRCDIR에있는 모든 파일을 포함하고 당신은 예를 들어,이 작업에 요소를 제외 추가 할 수 있습니다

<javac destdir="build" srcdir="src" > 
    <exclude name="**/my/package/test/*.java" /> 
</javac> 

이것은 my.package.test 패키지의 클래스 중 하나를 컴파일하지 않을 것입니다.

+2

문제는 다른 클래스가 해당 패키지에서 가져올 때 컴파일러가 여기에 해당 파일을 제외한다고 명시하더라도 해당 파일을 가져 오는 것입니다. 전체 포함/제외 항목은 javac에 공급되는 초기 세트입니다. Javac은 src 디렉토리를 기반으로 다른 파일을 자유롭게 가져올 수 있습니다. 특정 파일에 명시 적으로 액세스하지 않도록 javac에 알릴 필요가 있습니다. javac에 기꺼이 제공하려는 파일 만 복사 한 다음 해당 하위 집합을 컴파일해야이 작업을 수행 할 수 있다고 생각합니다. – Mike

+2

다른 코드가 의존하지 않는 패키지 (예 : 테스트 클래스)를 배포 할 때 유용합니다. –

0

Mike, 명시 적으로 특정 파일에 액세스하지 못하도록 javac에 지시하는 다른 방법은 sourcepath를 설정 해제하는 것입니다.

참고 : 난 그냥 개미 매뉴얼에서

...이 알아 낸 당신이 속성을 제외 /를 포함, 공통 루트 아래 특정 패키지에있는 유일한 소스 파일을 컴파일 사용하려는 경우 또는 /중첩 된 요소를 사용하여 이러한 패키지를 필터링하십시오. 은 패키지 구조의 일부를 srcdir 속성 (또는 중첩 요소)에 포함시키지 않거나 Ant는 컴파일 타겟을 실행할 때마다 시간마다 소스 파일을 다시 컴파일합니다. 추가 정보는 Ant FAQ를 참조하십시오.

명시 적으로 지정된 파일 만 컴파일하고 javac의의 기본 검색 메커니즘을 해제하고자하는 경우에는 원본 경로 속성을 설정 해제 할 수 있습니다

<javac sourcepath="" srcdir="${src}" destdir="${build}" > 
    <include name="**/*.java"/> 
    <exclude name="**/Example.java"/> 
</javac> 

그 방법은 javac의 모든 자바 소스 파일을 컴파일을 "$ {src}" 디렉토리 아래에 있지만 예제는 건너 뜁니다. 컴파일러는 예제 파일이 아닌 일부 파일을 참조하는 경우에도 오류를 생성합니다.

관련 문제