2012-10-18 73 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

那麼,如果你有一個文件在磁盤上,該文件來自某處。硬盤不會突然產生新文件。所以你需要找出一個文件來自哪裏,然後去那裏重複。 –