2011-07-03 188 views
7

我在Windows XP上使用maven3.03和Eclipse 3.5。我將舊的Web項目轉換爲Maven配置樣式。
當我在Eclipse中編譯項目的一切編譯。
注意:類路徑包含:Maven Dependencies和JDK(1.6_018)。
當我從命令行使用mvn進行編譯時,出現一些錯誤:
1.package com.sun.xml.internal.stream.buffer.stax不存在。 XMLDOMWriterImpl
四,包裝com.sun.xml.internal.messaging.saaj.util確實類:象徵 -
2.包裝com.sun.xml.internal.stream.writers不存在
3.cannot找到符號不存在
五,包裝com.sun.xml.internal.bind.v2.runtime.unmarshaller不存在
6.cannot找到符號 - 符號:類NamespaceContexHelper
7.cannot找到符號符號:類ByteOutputStreameclipse成功時Maven編譯失敗

我可以看到這個東西與太陽罐。但我不明白爲什麼日食是好的,命令行不是。

編輯:一是我沒有在上面的列表中提到的錯誤是:

[ERROR]<path>\EventsViewer.java:[54,69] inconvertible types found: <br>java.util.SortedMap<java.util.Date,java.util.List<com.myClass>> 
required: java.util.Map<? extends java.util.Date,? extends java.util.List<com.myOtherClass>> 


當我看到同樣的線在eclipse我得到警告:

Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
List<myOtherClass>> 

在Eclipse中,我收到警告,並在maven中出現錯誤。我沒有檢查org.eclipse.jdt.core.prefs並查看設置是org.eclipse.jdt.core.compiler.problem.forbiddenReference = warning。

更新: 我讀到了一些上述錯誤。 「問題」是在eclipse中它顯示爲未使用的導入。 stangly maven報告這個錯誤。刪除這個未使用的導入後,錯誤消失了。但仍然存在問題3和7發生

結論:我猜測警告在javac中變成錯誤。因爲我不使用任何supressWarnings。我很驚訝,錯誤是不同的。 這是什麼?

+0

很可能是您在Maven環境中設置的'JAVA_HOME' isnt' –

+0

您運行Maven和Eclipse的平臺是什麼? – Arpit

回答

2

仔細檢查您是否在Eclipse和Maven構建中使用相同的JDK。即使你認爲你是,無論如何再次檢查。

這些軟件包是某些Java版本中包含的軟件包,而不是其他軟件。

+0

如果Java版本不同,請添加maven-compiler-plugin源和目標的配置指向1。6並且從Maven項目上下文菜單更新項目配置將在很多情況下解決問題 – Omnaest

+0

要說清楚,我正在討論的是使用Java的實際目錄,而不是Java 5 vs Java 6 –

+0

好吧,我添加了它作爲單獨的答案,不要混淆某人 – Omnaest

0

如果Java版本不同,與源和目標對1指向的結構添加 maven-compiler-plugin

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <target>1.6</target> 
        <source>1.6</source> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

。6 更新從Maven項目上下文菜單中的項目配置將解決在許多情況下,不同步的問題(這會導致不同的編譯結果):

enter image description here

+0

謝謝。我在你寫的時候試過了maven-compiler-plugin,它沒有幫助。我沒有嘗試你的第二個建議(「更新項目配置」)(它有時候會以一種奇怪的方式改變我的.classpath),但我會再試一次,讓你知道。再次感謝。 – ronk

+0

沒有工作。奇怪的是,它使用J2SE_1.6來更改.classpath文件,而不是使用JDK1.6_018的eclipse。 – ronk

9

這也許是真正的原因 from maven forum's answer

「傑羅姆是正確的,它不是建議的做法,從rt.jar中使用的com.sun 類和標註特別的。‘內部’,你只是 找麻煩

但是我對此很好奇,所以試了一下。 Eclipse上面的類可以確實可以訪問 。但是,使用javac編譯 命令行上的代碼會失敗,並顯示「不存在」錯誤。所以我的 的假設是,Sun的java編譯器檢測何時訪問特殊的 「內部」類,並拒絕導入類。 Eclipse使用了一個不同的編譯器,它大概沒有這個檢查。

Maven只使用系統執行 路徑中可用的javac編譯器。因此這個問題與Maven完全沒有關係。這是maven正在調用的 編譯器,它拒絕編譯源代碼。 我在javac命令行中看不到任何公共標誌以禁止內部訪問的此「 」「阻止」,因此除非您想避免使用Sun的 javac編譯器,否則只需避免使用此內部類。

只是爲了好玩,我嘗試了把rt.jar中的類路徑 傑羅姆的建議: 的javac -cp /usr/java/jdk1.6.0_03/jre/lib/rt.jar Foo.java 但仍然沒有編譯。

ByteOutputStream類可以在運行時通過 Class.forName(「..」)加載

有趣的是,我正在處理的一個項目的確發生了導入類 com.sun.org.apache.xml.internal.utils.SAXSourceLocator; ,這工作正常。發佈警告,但代碼編譯(是的, 它是在我的TODO列表來解決這個問題:-)。所以這不是所有內部類別 被阻止,只是選定的。 「

0

這是我的情況:我已經加入//TODO後得到的IntelliJ中同樣的錯誤,自動的IntelliJ增加進口部分import com.sun.xml.internal.bind.v2.TODO;

此行除上述進口線後,問題解決了現在,我可以。能夠使用maven成功編譯