Maven依赖的必需Java版本?

aio*_*obe 19 java maven

我使用Maven开发并构建了我的Java应用程序.我需要支持Java 1.6,所以我使用以下属性:

<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,我得到一个"不支持的major.minor版本"错误,我怀疑我的一个依赖项jar是使用比我需要支持的Java版本更新的Java版本编译的.

我的问题:

  1. 这甚至可能吗?我以为Maven会处理这种依赖版本的问题.

  2. 有没有一种简单的方法可以找出所有依赖项的次要/主要版本?(如果可以在做mvn dependency:tree的时候显示它会很棒.)

khm*_*ise 22

问题是每个依赖项(维护者)都可以决定它自己使用哪个java版本进行编译(1.5,1.6,1.7,1.8等),所以这不能通过Maven解决.但是,您可以确保不使用使用不同Java版本的依赖项.

这可以通过使用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>
Run Code Online (Sandbox Code Playgroud)

如果您有一个使用不同版本的JDK编译的依赖项,那么这将破坏您的构建.

  • 可以通过“mvn validate”调用 (3认同)
  • 摘自文档:"此规则可传递地检查依赖关系,如果任何依赖关系的任何类的字节码版本高于指定的字节码版本,则会失败.请参阅http://mojo.codehaus.org/extra-enforcer-rules/enforceBytecodeVersion html的 (2认同)
  • 给我一些谷歌搜索来到这里.非常感激. (2认同)