0

我有一个多模块 Maven 项目。我做了mvn clean install其中一个示例,它下载并安装了一些依赖项。

如果我$ file WhateverClass.class从由 Maven 下载和编译的 WEB-INF/lib 中的某些 jar 中执行操作,我会不断收到

WhateverClass.class: compiled Java class data, version 51.0

这意味着该类已使用 Java 7 编译。

无论我先自己编译该模块多少次,我都会得到这个!为什么?在我看到目标文件夹是如何生成的之后,我还检查了模块本身的 .class 文件。

在该项目中,一些POM.xml指定的

<configuration>
  <source>1.5</source>
  <target>1.5</target>
</configuration>

但没有指定更高的java版本。

我的java版本是:

java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)

和 javac 版本:

javac 1.6.0_23

编辑

这是我的有效pom

4

1 回答 1

0

当您遇到此类问题时,请尝试隔离问题。第一步是沿着 JAR 的路径倒退:你在哪里找到的类?那个 JAR 是从哪里来的?如果它来自战争,它来自哪里?执行此操作,直到找到.class编译文件的计算机。检查 JAR 和.class文件target/classes/夹中的文件。

在每一步,当你看到 Java 7 时,继续运行并更进一步fileWhateverClass.class

找到构建计算机后,您可以使用以下选项来调试构建过程:

  • mvn -v显示 Maven 和 Java 的版本。
  • mvn help:effective-pom显示已解析的 POM(即在包含每个父 POM、解析所有属性后,您可以命名它)。哪个target选项处于活动状态?
  • 运行mvn-X获取调试输出。这有助于查看 Maven 将哪些选项传递给分叉进程。
于 2012-10-18T13:00:36.860 回答