我有一个顶级 Android Gradle 项目.在此项目下方嵌套了多个子项目(有时它们是 2 级深),即:
I have a top level Android Gradle project. There are multiple subprojects nested below this projects (sometimes they are 2 level deep) i.e:
top level project
|
project1
vendor libraries
|
lib1
lib2
lint 正在中止我在某些库项目中的构建.我可以编辑每个单独的库项目的 build.gradle 来解决问题
lint is aborting my build in some of the libraries projects. I can edit each individual library project's build.gradle to fix the problem with
android {
lintOptions {
abortOnError false
}
}
但是,我更喜欢顶级 build.gradle 脚本中的以下代码:
However, I would prefer the following code in the top level build.gradle script:
subprojects {
afterEvaluate {
if (getPlugins().hasPlugin('android') ||
getPlugins().hasPlugin('android-library')) {
println name // for debugging
android {
lintOptions {
abortOnError false
}
}
}
}
}
条件语句确保只挂钩到带有 android 插件的项目.我只能使用 afterEvaluate 让它工作.但是,我的构建仍然因 lint 错误而失败.
The conditional statement makes sure to hook only into projects with an android plugin. I could only get this to work using afterEvaluate. However, my build is still failing on lint errors.
有没有人有一个干净的解决方案来从顶层注入这些设置?
Does anyone have have a clean solution to inject these settings from the top level?
更新:
重新排列子项目和 afterEvaluate 或使用 allprojects 仍然会出现以下相同类型的错误:
Rearranging the subprojects and afterEvaluate or using allprojects still gives the same following kind of error:
7: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'.
> [Ljava/util/HashMap$Entry;
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
==============================================================================
BUILD FAILED
Total time: 40.528 secs
堆栈跟踪:
7: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'.
> [Ljava/util/HashMap$Entry;
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':3rdparty:OrmLiteQueryBuilder:lint'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:286)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
Caused by: java.lang.NoClassDefFoundError: [Ljava/util/HashMap$Entry;
at com.android.build.gradle.internal.dsl.LintOptionsImpl$1.$getStaticMetaClass(LintOptionsImpl.groovy)
at com.android.build.gradle.internal.dsl.LintOptionsImpl$1.<init>(LintOptionsImpl.groovy)
at com.android.build.gradle.internal.dsl.LintOptionsImpl.syncTo(LintOptionsImpl.groovy:450)
at com.android.build.gradle.internal.dsl.LintOptionsImpl$syncTo.call(Unknown Source)
at com.android.build.gradle.tasks.Lint.lintAllVariants(Lint.groovy:105)
at com.android.build.gradle.tasks.Lint$lintAllVariants.callCurrent(Unknown Source)
at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:63)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:530)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:513)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 13 more
Caused by: java.lang.ClassNotFoundException: java.util.HashMap$Entry
... 28 more
==============================================================================
BUILD FAILED
Total time: 2 mins 20.757 secs
我可以使用 -x lint 选项成功运行 gradle build,但想在不使用命令行选项的情况下进行构建.
I can run gradle build successfully with the -x lint option but want to build without using the commandline options.
我也遇到过类似的情况,但是我没有直接修改DSL,而是调用了configure:
I too faced a similar situation, but instead of just modifying the DSL directly, I called configure on it instead:
configure(android.lintOptions) {
abortOnError false
}
因此,我能够为我想要的子项目禁用 abortOnError.最重要的是,您的 subproject 块应如下所示:
As a result, I was able to disable abortOnError for my desired subprojects. Bottom line, your subproject block should look like this:
subprojects {
afterEvaluate {
if (getPlugins().hasPlugin('android') ||
getPlugins().hasPlugin('android-library')) {
println name // for debugging
configure(android.lintOptions) {
abortOnError false
}
}
}
}
这篇关于如何从多项目目录的顶层禁用 Android Gradle 插件中的 lint abortOnError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 IncompIncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 Incompatible
如何在 gradle 中获取当前风味How to get current flavor in gradle(如何在 gradle 中获取当前风味)
如何修复“意外元素<查询>在“清单How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修复“意外元素lt;查询gt;在“清单中找到错误
基于 Android Gradle 中多风味库的多风味应用Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多风味库的多风味应用)
Android 依赖在编译和运行时有不同的版本Android dependency has different version for the compile and runtime(Android 依赖在编译和运行时有不同的版本)
本地 aar 库的传递依赖Transitive dependencies for local aar library(本地 aar 库的传递依赖)