小编典典

所需的Maven依赖Java版本?

java

我使用Maven开发和构建了Java应用程序。我需要支持Java 1.6,因此我使用以下属性:

<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>

尽管如此,当我运行该应用程序时,仍然出现“不受支持的major.minor版本”错误,并且我怀疑我的一个依赖罐是使用比我需要支持的Java版本更新的Java版本进行编译的。

我的问题:

  1. 这有可能吗?我以为Maven会解决这种依赖版本问题。

  2. 有没有一种简单的方法来找出我所有依赖项的次要/主要版本?(mvn dependency:tree例如,如果可以在执行时显示它,那将是很棒的。)


阅读 220

收藏
2020-11-13

共1个答案

小编典典

问题在于每个依赖项(维护者)都可以自行决定使用哪个Java版本(1.5、1.6、1.7、1.8等)进行编译,因此无法通过Maven解决。但是您可以确保不使用依赖于您所不希望使用的Java版本的依赖项。

可以通过使用extra-enforcer-rules使用Maven
Enforcer插件
来实现:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version> <!-- find the latest version at http://maven.apache.org/plugins/maven-enforcer-plugin/ -->
        <executions>
          <execution>
            <id>enforce-bytecode-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>1.6</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-5</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

如果您的依赖项是使用与所需版本不同的JDK编译的,则这将破坏您的构建。

2020-11-13