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