2010-06-24 26 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