Java Maven can';t编译依赖于rt.jar的类
我负责的CI服务器(Hudson)构建了Maven项目。上次提交后,生成失败: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
[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内部类。