2010-06-24 27 views
1

我們的一個類使用jdk 1.6捆綁的jaxb api。當我嘗試使用maven編譯這個(JAVA_HOME設置爲JDK 1.6,並且它在IDE中顯示Maven使用JDK 1.6運行時),我得到了jaxb庫的類未找到錯誤。有問題的類出現在JDK 1.6 lib文件夾下的rt.jar中。有任何想法嗎???Maven沒有拿起JDK 1.6捆綁的庫

+0

具體是什麼例外? – skaffman 2010-06-24 15:45:07

回答

2

那麼......錯誤是由於在maven編譯期間太陽的內部類之一的使用。它是一個有趣的場景,雖然...

我的項目使用由sun的內部JAXB庫提供的NamespaceMapper。它在一個非maven化的eclipse環境中編譯(帶有警告),因爲rt.jar在類路徑中。我們開始對這個項目進行初始化,並且突然之間我得到了一個ClassNotFound。經過一些Google搜索後,我發現這兩個帖子讓我朝着正確的方向前進。

http://forums.java.net/jive/thread.jspa?threadID=24225

http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PK88316

底線:不要使用內部庫(軟件包名稱中都有內部)。

1

嘗試增加這個插件你的pom.xml Maven構建部分:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

更新:這是行不通的。

你試過嗎?

<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.1</version> 
    <scope>system</scope> 
    <systemPath>${java.home}/lib/rt.jar</systemPath> 
</dependency> 
+0

不...這不工作.... – Manoj 2010-06-25 08:47:48

+0

試試我的第二個解決方案。對不起,但我現在不能再現你的問題:-) – sourcerebels 2010-06-25 10:21:45

+0

嗨SourceRebels,謝謝你的帖子。正如我的答案中指出的那樣,使用內部類(com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper)不是一種好的做法,因此不是按照原樣工作,而是刪除了對內部jaxb實現的依賴關係,將我的代碼更改爲從jaxb ri導入。這解決了我的問題。 – Manoj 2010-06-25 13:20:39