2012-10-18 44 views
0

我有一个multimodule maven项目。我做了一个mvn clean install其下载和安装一些依赖关系的例子。无法编译为不同的java版本

,如果我从我的WEB-INF/lib中某些罐Maven的下载并编译做$ file WhateverClass.class我不断收到

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 

编辑

这里是我的effective-pom

回答

0

当你遇到这样的问题,请尝试隔离p roblem。第一步是追溯JAR的路径:你在哪里找到这门课?那个JAR从哪里来的?如果它来自战争,那是从哪里来的?直到找到编译.class文件的计算机。检查target/classes/文件夹中的JAR和.class文件。

在每一个步骤,运行fileWhateverClass.class和走一步,当你看到Java 7中

当你找到生成计算机,可以使用下列选项调试构建过程:

  • mvn -v向您显示Maven和Java的版本。
  • mvn help:effective-pom显示解析的POM(即在包括每个父POM之后,解析所有属性,将其命名)。哪个target选项处于活动状态?
  • 运行mvn-X得到调试输出。这可以帮助查看Maven传递给分叉进程的选项。
+0

thx @Aaron,我不知道该怎么做。当我做mvn -v时,我仍然得到Java6版本。当看着有效的POM(EDIT)时,我没有看到目标1.7的踪迹。不确定你的意思是“什么电脑罐子来自”。 – eskalera

+0

那么,如果你有一个文件在磁盘上,该文件来自某处。硬盘不会突然产生新文件。所以你需要找出一个文件来自哪里,然后去那里重复。 –