2009-09-07 2 views
4

더 최근의 JDK와 함께 제공되는 DOM API보다 오래된 DOM API가 포함 된 xml-apis JAR을 포함하는 dom4j JAR을 빌드하려고합니다.Ant는 JDK 클래스를 통해 링크 된 JAR에서 클래스를 선호합니까?

그러나 빌드 파일에서 소스 및 대상 컴파일러 속성이 1.3으로 설정되어 있고 xml-apis JAR이 빌드 경로에 포함되어 있더라도 Ant는 여전히 dom4j를 다른 새로운 w3c와 비교하여 컴파일하려고 시도합니다 API (JDK 설치에서 추측 한 것).

여기에 관련 개미 코드입니다 : lib 디렉토리가/승인에 사용되어야한다

<path id="compile.classpath"> 
    <fileset dir="./lib/endorsed"> 
     <include name="*.jar" /> 
    </fileset> 
    <fileset dir="./lib"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 

    <target name="compile" depends="prepare-src"> 
    <javac srcdir="${build.src}" 
      destdir="${build.dest}" 
      debug="${debug}" 
      optimize="${optimize}" 
      target="1.3" 
      source="1.3" 
      deprecation="${deprecation}" 
      classpathref="compile.classpath"> 
    </javac> 
    </target> 

하는 JAR,하지만 컴파일하는 동안 사용 아닙니다.

어째서?

답변

7

당신은 부팅 클래스 경로를 수정할 수 및 지원은 ANT의 특정 속성이 거기에,하지만 난 (원시 javac의에서)는 java.endorsed.dirs 재산해야한다고 생각 :

javac -Djava.endorsed.dirs=/some/path/lib/endorsed ... 

을 아니면 compilerarg ANT와 하위 요소 :

<target name="compile" depends="prepare-src"> 
    <javac srcdir="${build.src}" 
     destdir="${build.dest}" 
     debug="${debug}" 
     optimize="${optimize}" 
     target="1.3" 
     source="1.3" 
     deprecation="${deprecation}" 
     classpathref="compile.classpath"> 
    <compilerarg value="-Djava.endorsed.dirs=/some/path/lib/endorsed"/> 
</javac> 

당신은 부트 클래스 패스로 클래스 패스에 endorsed 디렉토리를 추가하지 말아야하고 승인 디렉토리는 필요한 유형을 해결하기 위해 클래스 패스 전에 확인됩니다. 이것은 JDK의 새로운 DOM 구현이 먼저 발견된다는 것을 의미합니다. 그래서 같은

+0

그 일을했다, 많이 고마워! – Matthias

0

이전 lib를 제외 할 수 있습니다.

<path id="compile.classpath">  
    <fileset dir="./lib"> 
     <include name="*.jar" /> 
     <exclude name="dom4j.jar" /> 
    </fileset> 
    <fileset dir="./lib/endorsed"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 
<target name="compile" depends="prepare-src"> 
    <javac srcdir="${build.src}" 
      destdir="${build.dest}" 
      debug="${debug}" 
      optimize="${optimize}" 
      target="1.3" 
      source="1.3" 
      deprecation="${deprecation}" 
      classpathref="compile.classpath"> 
    </javac> 
    </target> 
+0

내가 DOM4J이 아닌 내 자신의 프로젝트를 구축을 위해 노력하고 의미 없음.하지 이러한 대상은 dom4j 빌드 파일에서 가져옵니다. – Matthias

0

bootclasspath/bootclasspathref 속성을 사용하십시오.

0

그냥 참조를 위해이 달성 할 수 사용 받는다는,

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
      <compilerArguments> 
       <endorseddirs>${endorsed.dir}</endorseddirs> 
      </compilerArguments> 
     </configuration> 
    </plugin> 
</plugins> 
관련 문제