【发布时间】:2018-01-05 14:11:34
【问题描述】:
自从将 Kotlin 添加到我们的 Android 源代码后,我们的自动化构建会出现间歇性故障。大多数构建失败,而偶尔的构建,比如 1/10,会成功。这些错误在引入 Kotlin 之前没有发生,并且在我们的开发机器上本地构建时也不会发生 - 仅在构建服务器上。
通过命令行(即gradlew assembleFlavour1Flavour2)构建时,我们收到以下错误:Plugin with id 'com.android.application' not found。但是,当我们从 Android Studio 构建时(在构建服务器上,同一个 Jenkins 从站),我们会得到一个稍微不同的错误:Plugin with id 'kotlin-android' not found。我已经更新了 Android Studio(通过 File > Settings > System Settings > Updates)和 Kotlin(通过 Android Studio > Tools > Kotlin > Configure Kotlin Plugin Updates)。
我们的根build.gradle如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.2.10'
repositories {
google()
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'io.fabric.tools:gradle:1.25.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我们的应用程序 build.gradle,app/build.gradle,如下(带有敏感的业务特定部分)如下:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'io.fabric'
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "..."
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "0.4.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
flavorDimensions "redacted", "redacted"
productFlavors {
...(redacted)...
}
sourceSets {
...(redacted)...
}
buildTypes {
debug {
debuggable true
minifyEnabled false
shrinkResources false
applicationIdSuffix '.debug'
}
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// Set application name and filename
android.applicationVariants.all { variant ->
...(redacted)...
}
//Add deploy tasks
android.applicationVariants.all { variant ->
...(redacted)...
}
//Add generate javadoc task
project.tasks.create(name: "generateJavadoc", type:Javadoc) {
...(redacted)...
}
//Add clear javadoc task- ensures any previous javadoc files are removed first
project.tasks.create(name: "deleteJavadocDeployment", type:Delete) {
...(redacted)...
}
//Add deploy javadoc task
project.tasks.create(name: "deployJavadoc", type:Copy, dependsOn: ['deleteJavadocDeployment', 'generateJavadoc']) {
...(redacted)...
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation('com.squareup.retrofit2:converter-gson:2.2.0')
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.google.android.gms:play-services-vision:11.8.0'
compile 'com.google.android.gms:play-services-maps:11.8.0'
compile 'com.google.android.gms:play-services-places:11.8.0'
compile 'com.google.android.gms:play-services-location:11.8.0'
compile('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
transitive = true;
}
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'org.mockito:mockito-core:2.11.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
androidTestImplementation 'org.mockito:mockito-android:2.11.0'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.9.0'
}
为了完整起见,使用 --stacktrace 命令行的完整输出:
FAILURE: Build failed with an exception.
* Where:
Build file 'redacted\app\build.gradle' line: 1
* What went wrong:
A problem occurred evaluating project ':app'.
> Plugin with id 'com.android.application' not found.
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':ap
p'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptR
unnerImpl.run(DefaultScriptRunnerFactory.java:92)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$
2.run(DefaultScriptPluginFactory.java:187)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(Project
ScriptTarget.java:77)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.
apply(DefaultScriptPluginFactory.java:192)
at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperat
ionScriptPlugin.java:61)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(De
faultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(Defaul
tBuildOperationExecutor.java:107)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperat
ionScriptPlugin.java:58)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildSc
riptProcessor.java:39)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildSc
riptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.eva
luate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigur
e(LifecycleProjectEvaluator.java:63)
at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100
(LifecycleProjectEvaluator.java:33)
at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureP
roject.run(LifecycleProjectEvaluator.java:103)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(De
faultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(Defaul
tBuildOperationExecutor.java:107)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(L
ifecycleProjectEvaluator.java:49)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProjec
t.java:651)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProjec
t.java:133)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProje
ctEvaluator.java:35)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(Task
PathProjectEvaluator.java:62)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuil
dConfigurer.java:38)
at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(De
faultGradleLauncher.java:246)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(De
faultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(Defaul
tBuildOperationExecutor.java:107)
at org.gradle.initialization.DefaultGradleLauncher.configureBuild(Defaul
tGradleLauncher.java:165)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(Default
GradleLauncher.java:124)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultG
radleLauncher.java:107)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBui
ldController.java:78)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBui
ldController.java:75)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultW
orkerLeaseService.java:152)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBu
ildController.java:100)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildC
ontroller.java:75)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(Exe
cuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildA
ctionRunner.java:35)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(
ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(R
unAsBuildOperationBuildActionRunner.java:43)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBu
ildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(De
faultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(Defaul
tBuildOperationExecutor.java:107)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(Run
AsBuildOperationBuildActionRunner.java:40)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.ru
n(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:45)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:29)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(Bu
ildTreeScopeBuildActionExecuter.java:39)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(Bu
ildTreeScopeBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.ex
ecute(ContinuousBuildActionExecuter.java:71)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.ex
ecute(ContinuousBuildActionExecuter.java:45)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter
.execute(ServicesSetupBuildActionExecuter.java:51)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter
.execute(ServicesSetupBuildActionExecuter.java:32)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.
execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.
execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildAct
ionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildAct
ionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecu
ter.execute(StartParamsValidatingActionExecuter.java:64)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecu
ter.execute(StartParamsValidatingActionExecuter.java:29)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExe
cuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExe
cuter.execute(SessionFailureReportingActionExecuter.java:42)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execu
te(SetupLoggingActionExecuter.java:58)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execu
te(SetupLoggingActionExecuter.java:33)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBu
ild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(
WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute
(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.
execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(Forw
ardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(Forw
ardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(For
wardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogA
ndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClien
t.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBu
ild(EstablishBuildEnvironment.java:82)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(
DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.
run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(Daemon
StateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.
onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecu
torImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnabl
e.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'com.an
droid.application' not found.
at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPlu
ginManager.java:123)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.appl
yType(DefaultObjectConfigurationAction.java:113)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.acce
ss$200(DefaultObjectConfigurationAction.java:36)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.ru
n(DefaultObjectConfigurationAction.java:80)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.exec
ute(DefaultObjectConfigurationAction.java:136)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPlu
ginAware.java:46)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.jav
a:34)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_jesrcyvk01ha499dnctvfqjo.run(redacted\app\buil
d.gradle:1)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptR
unnerImpl.run(DefaultScriptRunnerFactory.java:90)
... 93 more
gradlew -v 报告以下版本信息:
------------------------------------------------------------
Gradle 4.1
------------------------------------------------------------
Build time: 2017-08-07 14:38:48 UTC
Revision: 941559e020f6c357ebb08d5c67acdb858a3defc2
Groovy: 2.4.11
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_152 (Oracle Corporation 25.152-b16)
OS: Windows Server 2012 R2 6.3 x86
根据 Android Studio 中的 SDK 管理器,我们安装了以下 SDK 平台:Android API 27 (rev. 1)、Android 8.0 (Oreo) (rev. 2),并安装了以下 SDK 工具:Android SDK Build-Tools、Android Emulator (27.0.2)(注意机器是 VM,所以模拟器不起作用),Android SDK Platform-Tools (27.0.1),Android SDK Tools (26.1.1),Android Support Repository (47.0.0),Google Repository (58)。
Android Studio 版本为 3.0,build no AI-171.4443003,SDK 工具 26.1.1,平台版本 API 27 修订版 1。“忽略的更新”为空白。
更新:尝试重新安装 Kotilin 插件并完全重新安装 Android Studio,但均未成功。尝试在服务器上使用 Kotilin 创建一个新的默认 Android 项目,但问题完全相同。所以我认为这一定是服务器配置的问题。
我还发现我可以不使用 Kotlin 创建一个新的默认项目,并且它:在 Android Studio 中构建,但不通过 CLI 构建。
为什么会出现这些错误,我可以做些什么来解决它们?
【问题讨论】:
标签: android gradle android-gradle-plugin kotlin