16

私が担当している 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 にあります。

プロジェクトの pom.xml にシステム依存関係を追加しようとしました ( http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependenciesの指示に従って):

<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 に変更しましたが、役に立ちませんでした。

この問題を解決する方法について何か提案はありますか?

4

2 に答える 2

9

欠落しているクラスは JRE 内部 (名前空間に示されているように) のようであり、コードから参照されるべきではありません。おそらく、特定のプラットフォームまたは JRE バージョンでのみ使用できます。

別の Base64 エンコーダー クラス ( Apache Commons Codec プロジェクトのクラスなど) に置き換えることを検討してください。

Java 8 アップデート

Java 8 では、JDK の public 部分に Base64 クラスがついに導入されました: java.util.Base64.

于 2012-10-29T12:54:17.033 に答える