如何识别代码编写的java版本?

lea*_*lea 10 java jakarta-ee

假设银行应用程序是用 Java EE 开发的。我们是现在致力于该应用程序的新人,不确定用于开发该应用程序的 Java EE 版本。

我们如何识别开发该项目的 Core Java/Java EE 版本?

Ste*_*n C 9

我们如何识别开发该项目的 Core Java/Java EE 版本?

(请注意,“开发用于”和“运行”是不同的问题。我正在回答前者......这就是所问的问题。)

没有 100% 可靠的方法可以做到这一点。

  • 如果项目是使用 Maven 或 Gradle 构建的,则项目声明的依赖项(在构建文件中)将列出 Java EE API 的特定版本,以及(通常)特定的 Java 源和目标版本。

  • Ant 构建文件中可能有类似的线索,但在依赖关系的情况下,您将依赖类路径条目的路径名中的线索……但这些线索可能不存在。

  • 对于 Java EE,XML 文件使用的命名空间 URL 中可能有线索;例如web.xmlapplication.xml.

  • 如果前面的方法没有帮助,那么您可以使用各种 JDK 并针对各种 Java EE API 来测试编译代码库。这应该会缩小代码库兼容的版本范围。

  • 如果您有现有.class文件,则javap可以告诉您构建时使用的目标字节码版本;看到这个答案。然而,这不是一个可靠的指标,因为它没有告诉您代码库是为哪个版本的 Java开发的


如果您想了解某个项目实际兼容或实际运行的 Java 版本,唯一确定的方法就是对其进行测试。


Kin*_*yan 6

如果您想知道使用哪个版本的 Java 来编译该类,可以使用javapJRE 和 JDK 中提供的 。它读取您的类字节码并告诉您版本。

javap -v out/com/kineolyan/tzio/diffs/Main.class给你:

Classfile /mnt/Grishka/Projets/project-tz-io/out/com/kineolyan/tzio/diffs/Main.class
  Last modified 9 oct. 2018; size 1806 bytes
  MD5 checksum 26b264396d74f1a68032bf5cd17aab09
final class com.kineolyan.tzio.diffs.Main
  minor version: 0
  major version: 53
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  ....
Run Code Online (Sandbox Code Playgroud)

请参阅此页面以将主要版本和次要版本与标准名称相匹配。例如,53.0是Java9。


Moh*_*tab 5

检查项目的 java 版本(如果使用 maven 构建)

  1. 转到 pom.xml
  2. 检查属性
  3. java版本

代码看起来像这样

<properties>
    <java.version>11</java.version>
    <start-class>org.la.ecom.portal.teacher.EcommercePortalTeacherApplication</start-class>
</properties>
Run Code Online (Sandbox Code Playgroud)