【问题标题】:Why the JDK Version in MANIFEST.MF and class file is different为什么 MANIFEST.MF 和类文件中的 JDK 版本不同
【发布时间】:2019-04-03 09:29:40
【问题描述】:

我使用 Jenkins 构建了我的项目(JDK 版本 1.7)(版本 2.164.1 和 JDK 1.8)

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

然后我得到了一个 jar 文件, 当我解压缩 jar 文件并 vim MANIFEST.MF

Build-Jdk:1.8.0_131

然后我运行

javap -verbose MyClass.class | grep "major"
major version: 51

类文件JDK版本为1.7

我的项目需要用JDK1.7运行,这个有问题吗?

【问题讨论】:

  • 它说使用的构建 jdk 是 1.8,但 51 告诉你“它是”1.7 - 你没问题。你有什么顾虑?
  • 我担心我的项目最后是用JDK1.8编译的,但是运行时是JDK1.7,会有问题。
  • 一般来说 - 不,你应该没问题,毕竟你确实将 source/target 指定为 1.7
  • 您还必须确保不使用 JDK8 中引入的任何 API。您应该从 JDK7 获取 rt.jar 并将引导类路径设置为指向它。 (或者为了安全起见,直接用JDK7编译)

标签: java maven jenkins java-8 java-7


【解决方案1】:

添加尤金的评论:

Build-Jdk 告诉您用于编译的 JDK 的确切版本(在您的情况下,这是 1.8.0_131)。此 JDK 可以构建具有各种兼容性级别的代码。这些级别在 maven-compiler-plugin 中配置。因此,您使用 Java 1.8 构建了与 Java 1.7 兼容的代码,这可能正是您想要的。

您可能会问Build-Jdk 版本是做什么用的:它可以帮助您追踪可能来自 JDK 中的错误或其他不兼容性的问题。

【讨论】:

  • 我明白,但我有一个顾虑。我之前一直在用JDK1.7编译。现在如果我用JDK1.8编译一个1.7的项目,在JDK1.7运行时会不会出现问题?非常感谢:)
  • 很可能不是。没有人能说没有错误,但这不太可能。
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2021-10-31
  • 2018-07-12
  • 1970-01-01
  • 2013-08-01
  • 2012-01-03
相关资源
最近更新 更多