Gradle lint 和测试构建错误 - JAXBException 和库中的无效包引用
Gradle lint & test build error - JAXBException and Invalid package reference in library
今天我试图将一个 Android 项目添加到 CIRCLE CI 我在 运行 ./gradlew lint 测试作为构建检查经过。问题是我遇到了一些烦人的错误,我花了好几个小时才解决它们:
在我的本地机器上,我得到:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
和 CIRCLE CI 抛出以下错误:
The first 3 errors (out of 10) were:
/home/circleci/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar: Error: Invalid package reference in library; not included in Android: java.awt.datatransfer. Referenced from 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: Error: Invalid package reference in library; not included in Android: java.awt.event. Referenced from 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: Error: Invalid package reference in library; not included in Android: java.awt. Referenced from 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>
在此先感谢您的帮助。如果需要,请询问更多信息!
@Gabi 我能够在 public github repo + circleci 中复制这个问题,并解决它。
请查看以下Public android-实践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 build中得到了和你一样的错误
提交:https://github.com/ejparz/android-practice/commit/ca6f502170439e28cbcf269eac302369a282d7d0
构建:https://circleci.com/gh/ejparz/android-practice/7
请注意构建中存在与您报告的相同的错误
错误:库中的包引用无效;未包含在 Android 中:java.awt.datatransfer。参考自javax.activation.ActivationDataFlavor等
然后,我通过在 应用程序模块的根目录 [=18= 添加一个 lint.xml 文件来修复错误]
提交:https://github.com/ejparz/android-practice/commit/7e9f7ca030370570e55c34201fd6f568e049279e
建造:https://circleci.com/gh/ejparz/android-practice/8
构建成功!
请注意 lint.xml 文件的位置非常重要。它不能位于项目的根目录。它必须位于模块的根目录(如其他 SO post: 所示)
如果这对你有用,请告诉我。
此错误是由您的 JDK 版本引起的(此 SO 中有更好的解释)
在 Mac 上你可以尝试使用 brew 安装 JDK8 解决问题。
这样做:
- 从这个 website
安装 Brew
- 运行
brew tap adoptopenjdk/openjdk
开启jdk公式(官方已经不可用)
- 运行
brew cask install adoptopenjdk/openjdk/adoptopenjdk8
安装打开jdk8
- 运行
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 版本
今天我试图将一个 Android 项目添加到 CIRCLE CI 我在 运行 ./gradlew lint 测试作为构建检查经过。问题是我遇到了一些烦人的错误,我花了好几个小时才解决它们:
在我的本地机器上,我得到:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
和 CIRCLE CI 抛出以下错误:
The first 3 errors (out of 10) were: /home/circleci/.gradle/caches/modules-2/files-2.1/javax.activation/activation/1.1.1/485de3a253e23f645037828c07f1d7f1af40763a/activation-1.1.1.jar: Error: Invalid package reference in library; not included in Android: java.awt.datatransfer. Referenced from 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: Error: Invalid package reference in library; not included in Android: java.awt.event. Referenced from 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: Error: Invalid package reference in library; not included in Android: java.awt. Referenced from 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>
在此先感谢您的帮助。如果需要,请询问更多信息!
@Gabi 我能够在 public github repo + circleci 中复制这个问题,并解决它。
请查看以下Public android-实践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 build中得到了和你一样的错误
提交:https://github.com/ejparz/android-practice/commit/ca6f502170439e28cbcf269eac302369a282d7d0
构建:https://circleci.com/gh/ejparz/android-practice/7
请注意构建中存在与您报告的相同的错误 错误:库中的包引用无效;未包含在 Android 中:java.awt.datatransfer。参考自javax.activation.ActivationDataFlavor等
然后,我通过在 应用程序模块的根目录 [=18= 添加一个 lint.xml 文件来修复错误]
提交:https://github.com/ejparz/android-practice/commit/7e9f7ca030370570e55c34201fd6f568e049279e
建造:https://circleci.com/gh/ejparz/android-practice/8
构建成功!
请注意 lint.xml 文件的位置非常重要。它不能位于项目的根目录。它必须位于模块的根目录(如其他 SO post:
如果这对你有用,请告诉我。
此错误是由您的 JDK 版本引起的(此 SO
在 Mac 上你可以尝试使用 brew 安装 JDK8 解决问题。
这样做:
- 从这个 website 安装 Brew
- 运行
brew tap adoptopenjdk/openjdk
开启jdk公式(官方已经不可用) - 运行
brew cask install adoptopenjdk/openjdk/adoptopenjdk8
安装打开jdk8 - 运行
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 版本