我有一个由客户使用Java 7运行时运行的项目。
我在针对Java 8编译的工件中添加了依赖项 - 使用Java 8功能,如lambdas和流。
编译我的项目时,我没有收到任何错误的错误。
在运行时,我得到了一堆错误,显然没有识别出来。
有没有办法保护我的项目不使用工件,具体取决于更高级别的Java?谢谢。
*这是一个工件的一般性问题,取决于某些低级Java API,它试图在依赖于更高级别Java的另一个工件上添加依赖项。
*我想这是因为Java不是显式依赖关系定义的一部分,而是隐含的。问题是如何使其更加明确和受到保护。
答案 0 :(得分:4)
您可以将maven-enforcer-plugin与extra-enforcer-rule结合使用,如下所示:
<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-6</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
[...]
</project>
您可以更安全地使用另一个enforcer-rule来强制使用正确的JDK