当前位置: 首页 > 面试题库 >

所需的Maven依赖Java版本?

蒋英博
2023-03-14
问题内容

我使用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版本进行编译的。

我的问题:

  1. 这有可能吗?我以为Maven会解决这种依赖版本问题。

  2. 有没有一种简单的方法来找出我所有依赖项的次要/主要版本?(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