Maven无法编译依赖于rt.jar的类

我负责的CI服务器(Hudson)构建了Maven项目。 在最后一次提交后,构建失败:

[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] \hudson\jobs\path to my class\MyClass.java:[33,62] package com.sun.xml.internal.messaging.saaj.packaging.mime.util does not exist [ERROR] \hudson\jobs\path to my class\MyClass.java:[75,5] cannot find symbol symbol : class BASE64EncoderStream location: class |fullname of MyClass| [ERROR] \hudson\jobs\path to my class\MyClass.java:[75,38] cannot find symbol symbol : class BASE64EncoderStream location: class |fullname of MyClass| [INFO] 3 errors 

必需的类(com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream)位于rt.jar中。

我尝试(按照http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies中的说明)在项目的pom.xml中添加系统依赖项:

  dummy dummy 1 system ${java.home}/lib/rt.jar  

它没有帮助。

最有趣的是所有文件在我的同事的本地机器上编译得很好(他使用Eclipse内置编译器)。

在互联网上,我发现了同样的问题(链接: http : //maven.40175.n5.nabble.com/Why-can-t-Maven-find-com-sun-xml-internal-messaging-saaj-util-ByteOutputStream- class-td107361.html )。 最后一个答案是,这个问题的原因是Oracle的Java编译器。

所以,我将Oracle的jdk更改为OpenJDK,但它没有帮助。

有人对如何解决这个问题有任何建议吗?

缺少的类似乎是内部的JRE(如其命名空间中所示),不应该从您的代码中引用。 它可能仅适用于特定平台或JRE版本。

考虑将其替换为另一个Base64编码器类,例如Apache Commmons Codec项目中的一个 。

需要指定-XDignore.symbol.file并添加rt.jar依赖项和true因为编译器插件将以静默方式删除任何-XD标志:例如

  ...  groupid artifiactId 1.0 system ${java.home}/lib/rt.jar      org.apache.maven.plugins maven-compiler-plugin 3.3  1.7 1.7  -XDignore.symbol.file  true  ...