需要Java版本的Maven依赖关系?

我使用Maven开发和构建了我的 Java应用程序.我需要支持 Java 1.6,所以我使用以下属性
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>

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

我的问题:

>这甚至可能吗?我认为Maven会照顾这种依赖版本的问题.
>有没有一个简单的方法找出所有我的依赖关系的次要/主要版本? (如果在执行mvn依赖性时可以显示树,则会很棒).

解决方法

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

这可以通过使用Maven Enforcer Plugin使用extra-enforcer-rules

<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编译的依赖关系,这将破坏您的构建.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...