첫 번째로 정의한 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>
없음이 없다. 왜냐하면 라이브러리는 컴파일 된 파일이기 때문입니다. – Jens
이론적으로는 바이트 코드 서명이나 무언가를 검사 할 수있는 가능성이 있어야합니다. – Whimusical
불행히도 종속성에는 자바 버전 속성이 없지만 http://stackoverflow.com/questions/2567024/maven- project-dependecy-against-jdk-version. 또한 클래스 스캔을 수행하는 maven 플러그인을 만들 수도 있습니다 (쉬운). –