Maven:如何保护Java 7项目不使用针对Java 8编译的jar工件?

时间:2016-12-21 11:25:33

标签: java maven java-8 maven-3 java-7

我有一个由客户使用Java 7运行时运行的项目。

我在针对Java 8编译的工件中添加了依赖项 - 使用Java 8功能,如lambdas和流。

编译我的项目时,我没有收到任何错误的错误。

在运行时,我得到了一堆错误,显然没有识别出来。

有没有办法保护我的项目不使用工件,具体取决于更高级别的Java?谢谢。

*这是一个工件的一般性问题,取决于某些低级Java API,它试图在依赖于更高级别Java的另一个工件上添加依赖项。

*我想这是因为Java不是显式依赖关系定义的一部分,而是隐含的。问题是如何使其更加明确和受到保护。

1 个答案:

答案 0 :(得分:4)

您可以将maven-enforcer-pluginextra-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