Maven:如何保护 Java 7 项目不使用针对 Java 8 编译的 jar 工件?
Maven: How to protect a Java 7 project from using jar artifacts that compile against Java 8?
我有一个项目 运行 客户使用了 Java 7 运行 时间。
我在针对 Java 8 编译的工件中添加了依赖项 - 使用 Java 8 项功能,例如 lambda 和流。
编译我的项目时,我没有收到任何错误提示。
虽然在 运行 时间里,我遇到了一堆错误,显然没有识别出东西。
有没有办法保护我的项目不使用依赖于更高级别的工件Java?谢谢。
* 这是一个依赖于某个低级别 Java API 的工件的一般问题,它试图添加对另一个依赖更高级别 Java 的工件的依赖。
* 我猜这是因为 Java 不是显式依赖定义的一部分,而是隐式的。问题是如何让它更加明确和受到保护。
您可以使用如下所示的 maven-enforcer-plugin in combination with the 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
我有一个项目 运行 客户使用了 Java 7 运行 时间。
我在针对 Java 8 编译的工件中添加了依赖项 - 使用 Java 8 项功能,例如 lambda 和流。
编译我的项目时,我没有收到任何错误提示。
虽然在 运行 时间里,我遇到了一堆错误,显然没有识别出东西。
有没有办法保护我的项目不使用依赖于更高级别的工件Java?谢谢。
* 这是一个依赖于某个低级别 Java API 的工件的一般问题,它试图添加对另一个依赖更高级别 Java 的工件的依赖。
* 我猜这是因为 Java 不是显式依赖定义的一部分,而是隐式的。问题是如何让它更加明确和受到保护。
您可以使用如下所示的 maven-enforcer-plugin in combination with the 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