Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven can';t编译依赖于rt.jar的类_Java_Maven_Continuous Integration - Fatal编程技术网

Java Maven can';t编译依赖于rt.jar的类

Java Maven can';t编译依赖于rt.jar的类,java,maven,continuous-integration,Java,Maven,Continuous Integration,我负责的CI服务器(Hudson)构建了Maven项目。上次提交后,生成失败: [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] \hudson\jobs\path to my class\MyCla

我负责的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中添加系统依赖项:

<dependency>
    <groupId>dummy</groupId>
    <artifactId>dummy</artifactId>
    <version>1</version>
    <scope>system</scope>
    <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

笨蛋
).最后一个答案是,出现此问题的原因是Oracle的Java编译器

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


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

缺少的类似乎是JRE internal(如名称空间所示),不应从代码中引用。它可能仅在特定平台或JRE版本上可用

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

Java 8更新


Java8最终在JDK的公共部分引入了Base64类:。

需要指定
-XDignore.symbol.file
,并添加rt.jar依赖项和
true
,否则编译器插件将自动删除任何-XD标志:例如

    ...
    <dependency>
        <groupId>groupid</groupId>
        <artifactId>artifiactId</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${java.home}/lib/rt.jar</systemPath>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <compilerArgs>
                    <arg>-XDignore.symbol.file</arg>
                </compilerArgs>
                <fork>true</fork>
            </configuration>
            ...
。。。
用户组
人工鱼
1
系统
${java.home}/lib/rt.jar
org.apache.maven.plugins
maven编译器插件
3.3
1.7
1.7
-XDignore.symbol.file
真的
...

这是一个特殊的解决方案,其他类呢?例如不安全?没有一个好的替代品,使用它需要依赖sun。*类,我们在gradle中可以做什么?不幸的是,我不熟悉那个类。不过,对于一个全新的问题来说,这可能是一个很好的主题。因为Java 6不再需要到外部查找Base64实用程序:它们位于
javax.xml.bind.DatatypeConverter
中,从技术上讲,它是JAXB的一部分,但无论您是否使用JAXB,您都可以使用它。我使用的是ByteOutputStream,因此出现了这个错误。当我把它改为ByteArrayOutputStream时,它就像一个符咒。从不知道JRE内部类。