2010-04-02 7 views
7

특정 버전의 JDK로 빌드해야하는 프로젝트가 있습니다.JDK 버전에 대한 Maven 프로젝트 종속성

문제는 소스 및 대상 매개 변수가 아니라 컴파일하는 동안 사용 된 런타임의 jar 파일에 있습니다. 잘못된 JDK로 컴파일하려고하면 컴파일 오류가 발생하지만 빌드가 성공적 일 때가 있고 jar를 사용할 때 런타임 오류가 발생하는 경우가 있습니다.

예를 들어, .classpath 파일에서 프로젝트에 대한 실행 환경을 설정할 수 있습니다.

maven에서 이러한 상황을 처리 할 수있는 방법이 있습니까?

내가 갖고 싶은 것은 POM 파일에서 프로젝트의 다른 종속성처럼 JRE 종속성을 처리 할 수있는 능력입니다.

업데이트 : 나는이 질문을했다, 그래서 그것을 변경되지 않습니다 때 허용되는 솔루션은 최고였다

. 한편 이러한 종류의 문제에 대한 새로운 해결책이 도입되었습니다 : Maven Toolchain. 자세한 내용은 링크를 따르십시오.

답변

2

내가이 글을 발견했습니다 :이 영향 컴파일러 언어 (소스)을 읽는 방법 만 있기 때문에 소스 및 대상 매개 변수의 문제가 아니다 말했듯이,

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project> 
    [...] 
    <build> 
    [...] 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <executable>${JAVA_1_4_HOME}/bin/javac</executable> 
      <compilerVersion>1.3</compilerVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    [...] 
    </build> 
    [...] 
</project> 
+0

감사합니다. 이로 인해 내 문제가 해결되었습니다. –

1

나는 이것이 당신의 치어에 플러그인을 다음과 같이 해결 될 수 있다고 생각 : 여기

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

당신은 버전 1.6을 대상으로, 또는 자신의 버전을 쓰기 내가 구축해야하는 프로젝트가

+1

없음을하고 바이트 코드 (타겟)를 생성하지만 컴파일에 사용 된 라이브러리는 생성하지 않습니다. 1.5 소스/타겟 매개 변수로 1.6 jdk 프로젝트를 사용하여 컴파일하는 경우 1.5 jre로 실행에 유효하지 않은 jar를 얻을 수 있습니다 (예 : 라이브러리 클래스의 오버로드 된 메소드에 문제가있을 수 있음). –

+0

@ 안드레아 다음 파스칼 솔루션 대답은 – ant

+0

네, 프로필이 필요하다고 생각합니다. –

2

JDK의 특정 버전으로.

당신은 JDK의 특정 버전의 사용을 적용 할 Maven Enforcer plugin를 사용할 수 있습니다

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.5</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

을하지만 난 정말 질문을 이해 모르겠어요. 이것이 원하는 것이 아니라면 JDK 특정 종속성을 프로파일에 선언하고 JDK 버전을 기반으로 한 활성화 트리거를 사용할 수 있습니다. 예 :

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.5</jdk> 
    </activation> 
    ... 
    </profile> 
</profiles> 

이 구성은 JDK 버전이 "1.5"로 시작될 때 프로필을 트리거합니다.

+0

감사합니다. Enforcer 플러그인은 내 문제를 완전히 해결하지는 않지만 정말로 유용합니다. –