Ser*_*gey 15 java continuous-integration maven
我负责的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
Run Code Online (Sandbox Code Playgroud)
必需的类(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>
Run Code Online (Sandbox Code Playgroud)
它没有帮助.
最有趣的是所有文件在我的同事的本地机器上编译得很好(他使用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,但它没有帮助.
有人对如何解决这个问题有任何建议吗?
kar*_*aze 15
需要指定-XDignore.symbol.file并添加rt.jar依赖项,<fork>true</fork>因为编译器插件将以静默方式删除任何-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>
...
Run Code Online (Sandbox Code Playgroud)
缺少的类似乎是JRE内部的(如其命名空间中所示),不应该从您的代码中引用.它可能仅适用于特定平台或JRE版本.
考虑将其替换为另一个Base64编码器类,例如Apache Commmons Codec项目中的一个.
Java 8更新
Java的8终于在JDK的公共部分引入了一个Base64类:java.util.Base64.