【问题标题】:How to know the JDK minimum required version for my API如何知道我的 API 所需的 JDK 最低版本
【发布时间】:2014-08-27 02:10:00
【问题描述】:

我正在编写一个使用许多库的 Java API。我想知道使用我的 API 必须使用的最低 JDK 版本。在我的 POM 中,我有这个:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
           <configuration>
                <source>1.5</source>
                <target>1.4</target>
            </configuration>  
      ...
</plugin>

如果我将 1.4 作为源版本,我会收到错误(注释)。像这样我可以生成我的 Jar 文件。我的问题是我已经看到我使用的库之一需要 1.6,而我的目标是 1.4。那么为什么我成功地生成了我的 Jar 呢? maven 是否验证每个依赖项的所需版本?

【问题讨论】:

    标签: java maven version


    【解决方案1】:

    这是来自 Maven 文档:

    仅设置目标选项并不能保证您的代码 实际上在具有指定版本的 JRE 上运行。陷阱是 意外使用仅存在于后来的 JRE 中的 API,这将 使您的代码在运行时因链接错误而失败。为了避免这种情况 问题,您可以配置编译器的引导类路径以匹配 目标 JRE 或使用 Animal Sniffer Maven Plugin 来验证您的 代码不使用非预期的 API。

    希望对你有帮助。

    【讨论】:

    • 在问我的问题之前我已经读过了,但我不明白configure the compiler's boot classpath to match the target JRE 的意思,我什至看了Animal Sniffer Maven Plugin,但我也不明白
    • @user230137 您需要使用您打算运行的 JVM 库进行构建。如果您使用不同的库,您将不会知道您正在使用旧版本中不可用的功能。最简单的做法是使用至少需要支持的版本。
    • @PeterLawrey 我没有义务我只是不想说我的 API 需要 Java 1.7,实际上可以使用 Java 1.5。这就是为什么我问我的问题。如果我决定使用 Java 1.5,然后我使用需要 1.6 但我不知道的库,我编译时会出错吗?
    【解决方案2】:

    此参数所做的只是将选项传递给javac 您不能从另一个源构建版本1.4,而是从1.4 源。鉴于 Java 1.4 太旧了,它在正式的生命终止日期开始之前就停止了支持,如果你有任何选择,我不会支持它。

    顺便说一句,即使您有 1.4 源和目标,仅此一项并不能保证它可以在 Java 1.4 上运行。您还必须使用 Java 1.4 编译器。如果您不这样做,您可以使用 Java 1.5 中的方法/类,这些方法/类在 Java 1.4 中不可用

    那么为什么我成功生成了我的 Jar?

    因为您编译了代码、更改了版本并构建了 jar。如果你做一个干净的构建,这是行不通的。

    maven 是否验证每个依赖项的所需版本?

    它不验证任何东西,只是验证它调用的程序是否正确执行。

    【讨论】:

    • 谢谢,但是你说clean build是什么意思?是提供maven的选项吗?
    • 你可以看看animal-sniffer-plugin
    • @user230137 要获得干净的构建,请先执行mvn clean。或者您可以使用 mvn clean install 进行清理和安装
    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2018-02-27
    • 2015-04-11
    相关资源
    最近更新 更多