我负责的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中添加系统依赖项:
<dependency>
    <groupId>dummy</groupId>
    <artifactId>dummy</artifactId>
    <version>1</version>
    <scope>system</scope>
    <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

它没有帮助。

最有趣的是,所有文件在我的同事的本地计算机上都可以正常编译(他使用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内部的(如其 namespace 中所示),不应从您的代码中引用。它可能仅在特定平台或JRE版本上可用。

考虑将其替换为另一个Base64编码器类,例如一个来自Apache Commmons Codec project

Java 8更新

Java 8最终在JDK的公共(public)部分 java.util.Base64 中引入了Base64类。

07-24 09:38
查看更多