我使用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版本进行编译的。
我的问题:
这有可能吗?我以为Maven会解决这种依赖版本问题。
有没有一种简单的方法来找出我所有依赖项的次要/主要版本?(mvn dependency:tree
例如,如果可以在执行时显示它,那将是很棒的。)
问题在于每个依赖项(维护者)都可以自行决定使用哪个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编译的,则这将破坏您的构建。
问题内容: 最近,我一直在研究前一段时间开发的项目中的一些改进,这就是我所发现的。pom文件中的许多依赖项都没有指定版本,但是已经解决了。该项目包含1个根模块和2个子模块。使用了Aggregator模式,这意味着根本没有dependencyManagement部分。上层项目仅聚合了2个模块,仅此而已。子项目并不将其称为父项。他们有不同的父母。我无法理解的是,子项目本身或它们的父项(事实上,它也没有
我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相
MVNRepository通常为每个依赖项列出“版本”和“更新”。 如果我发布自己的包,如何指定“更新”版本 Maven在解决传递依赖时使用了哪个依赖项?所以如果我的包依赖于包A,它依赖于包B,版本=1.0,更新=1.1。我会得到哪个版本的B?
我正在从1.6升级到1.8的过程中。 因此,我正在寻找一种列出所有不兼容Java1.8的依赖项的好方法。我已经设置了JAVA_HOME。我使用的是Maven 3.3.9。
是否可能在运行时检索特定maven依赖项的版本? 例如。对于pom.xml: 我想检索具有工件ID的特定依赖项的版本。
Semantic Versioning Packages in Yarn follow Semantic Versioning, also known as “semver”. When you install a new package from the registry it will be added to your package.json with a semver version ra