我使用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版本编译的.
我的问题:
这甚至可能吗?我以为Maven会处理这种依赖版本的问题.
有没有一种简单的方法可以找出所有依赖项的次要/主要版本?(如果可以在做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编译的依赖项,那么这将破坏您的构建.
| 归档时间: |
|
| 查看次数: |
6549 次 |
| 最近记录: |