2016-07-11 3 views
1

Maven에서 대상을 구성하면 라이브러리 코드가 이전 컴파일러 버전에서 실행되지만, 종속 라이브러리가 향후 버전 인 경우 라이브러리를 실행할 때 실패하지 않습니다.종속성에서도 컴파일러 대상 버전을 적용 할 수있는 방법이 있습니까?

예를 들어 내 JDK가 컴파일러 용 Java8 인 경우, 내 코드가 Optionals를 사용하는 경우 대상 1.7을 전달하지만 Java 내부 종속성으로 제공되는 1.8에서 도입 된 클래스이므로 실행할 때 오류가 발생합니다 .

전체 라이브러리가 1.7을 준수하도록 보장하는 메커니즘이 있습니까? 따라서 컴파일 할 때 Optionals가 시작될 수 있습니까?

+3

없음이 없다. 왜냐하면 라이브러리는 컴파일 된 파일이기 때문입니다. – Jens

+0

이론적으로는 바이트 코드 서명이나 무언가를 검사 할 수있는 가능성이 있어야합니다. – Whimusical

+2

불행히도 종속성에는 자바 버전 속성이 없지만 http://stackoverflow.com/questions/2567024/maven- project-dependecy-against-jdk-version. 또한 클래스 스캔을 수행하는 maven 플러그인을 만들 수도 있습니다 (쉬운). –

답변

3

첫 번째로 정의한 target/source은 컴파일하는 데 사용 된 JVM 버전과 다른 JVM 버전에서 작동한다는 것을 보증하지는 않습니다 (실제로는 발생하지만 발생합니다). 이에 대한 유일한 해결책은 적절한 JDK가 설치되어 있고 올바른 JDK로 컴파일했다고 가정하는 maven toolchains을 사용하는 것입니다. 당신이 당신의 빌드를 실행 그래서 경우 라이브러리와 문제에 대한 또한

당신은 또한 JDK 서명 파일에 대해 라이브러리를 검사합니다 animal-sniffer-maven-plugin을 사용할 수 있습니다 ...

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>animal-sniffer-maven-plugin</artifactId> 
     <version>1.15</version> 
     ... 
     <configuration> 
      ... 
      <signature> 
      <groupId>org.codehaus.mojo.signature</groupId> 
      <artifactId>java17</artifactId> 
      <version>1.0</version> 
      </signature> 
      ... 
     </configuration> 
     ... 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 

당신이 될 것입니다 사용하는 모든 라이브러리 JDK 서명 파일과 비교하여 검사합니다.

는 바이트 코드는이 같은 extra-enforcer-rules과 조합 maven-enforcer-plugin를 사용할 수도 확인하지 않으려면 :

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <version>1.4.1</version> 
     <executions> 
      <execution> 
      <id>enforce-bytecode-version</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <enforceBytecodeVersion> 
        <maxJdkVersion>1.7</maxJdkVersion> 
        <excludes> 
        <exclude>org.mindrot:jbcrypt</exclude> 
        </excludes> 
       </enforceBytecodeVersion> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>extra-enforcer-rules</artifactId> 
      <version>1.0-beta-4</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
관련 문제