今天,我试图将一个Android项目添加到正在运行./gradlew的lint测试的CIRCLE CI中,以检查是否通过构建。问题是我遇到了一些烦人的错误,而且我要花几个小时才能解决它们:
在我的本地计算机上,我得到:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
并在CIRCLE CI上引发以下错误:
前3个错误(共10个)是: /home/circleci/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar:错误:库中无效的包引用;不包含在Android中:java.awt.datatransfer。从javax.activation.ActivationDataFlavor引用。 [InvalidPackage] /home/circleci/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar:错误:库中无效的包引用;不包含在Android中:java.awt.event。引用自com.sun.activation.viewers.TextEditor。 [InvalidPackage] /home/circleci/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar:错误:库中无效的包引用;不包含在Android中:java.awt。从com.sun.activation.viewers.ImageViewer引用。 [InvalidPackage]
我在我的android项目中使用数据绑定,以及livedata和androidx。我在网上搜索了几个小时,没有任何帮助。我试图用以下方法使错误静音:
lintOptions {
abortOnError true
lintConfig file("lint.xml")
}
和lint.xml:
<lint>
<issue id="InvalidPackage">
<ignore path="**/activation*.jar"/>
</issue>
</lint>
在此先感谢您的帮助。如果需要,请询问更多信息!
答案 0 :(得分:0)
@Gabi,我能够在公开的github repo + circleci中复制该问题,并解决它。
请参阅以下公开的android-practice github repo提交历史记录:https://github.com/ejparz/android-practice/commits/master
作为此提交的一部分,我使相应的CircleCi构建正常运行。
提交:https://github.com/ejparz/android-practice/commit/b5f4b20a2adc3ef828153b39869f766ee7e9920e
构建:https://circleci.com/gh/ejparz/android-practice/6
然后我添加了一个无效的程序包(javax.activation:activation),并在相应的circleci版本中得到了与您相同的错误
提交:https://github.com/ejparz/android-practice/commit/ca6f502170439e28cbcf269eac302369a282d7d0
构建:https://circleci.com/gh/ejparz/android-practice/7
注意构建与您报告的错误相同 错误:库中的软件包引用无效;不包含在Android中:java.awt.datatransfer。从javax.activation.ActivationDataFlavor 等引用。
然后,我通过在 应用程序模块的根目录
中添加lint.xml文件来修复错误提交:https://github.com/ejparz/android-practice/commit/7e9f7ca030370570e55c34201fd6f568e049279e
构建:https://circleci.com/gh/ejparz/android-practice/8
现在构建成功!
请注意,lint.xml文件的位置非常重要。它不能走到项目的根本。它必须位于模块的根目录(如该其他SO帖子所述:Firestore: Invalid package reference in library)
请告诉我这是否适合您。
答案 1 :(得分:0)
此错误是由您的JDK版本引起的(此SO answer中的更好解释)
在Mac上,您可以尝试使用brew安装JDK8,这可以解决问题。
要这样做:
brew tap adoptopenjdk/openjdk
以启用采用开放的jdk公式(该官员不再可用)。brew cask install adoptopenjdk/openjdk/adoptopenjdk8
以安装Open JDK 8 brew install jenv
以安装jenv(Java版本管理器)echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
并
echo 'eval "$(jenv init -)"' >> ~/.zshrc
(如果您使用ZSH或echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
,并且
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
(如果您使用BASH jenv add Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
以添加jdk版本8 jenv versions
列出您已安装的版本jenv global <name of version>
更改为另一个在此website中了解有关jenv的更多信息,您还可以通过文件夹而不是全局配置Java版本