Xtendroid icon indicating copy to clipboard operation
Xtendroid copied to clipboard

Gradle build issue with latest gradle & plugins

Open tobykurien opened this issue 8 years ago • 5 comments

Gradle build fails when using the latest Gradle, android plugin, xtend plugin. Continuation of https://github.com/tobykurien/Xtendroid/issues/88#issuecomment-262910861

tobykurien avatar Nov 27 '16 07:11 tobykurien

After some investigation I found out that the xtext-android-gradle-plugin version 1.0.9 works with the current Xtendroid, new_development branch.

I tried removing this from XtextAndroidBuilderPlugin because this is new after 1.0.9 (i.e. >= 1.0.10 etc.):

-			android.packagingOptions [
-				exclude('META-INF/ECLIPSE_.RSA')
-				exclude('META-INF/ECLIPSE_.SF')
-			]

and that seems to get rid of this dreaded issue:

~/Documents/git-repositories/Xtendroid> ./gradlew clean :Xtendroid:build
Parallel execution is an incubating feature.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':HandlerExample'.
> Failed to notify project evaluation listener.
   > A problem occurred configuring project ':Xtendroid'.
      > Android tasks have already been created.
        This happens when calling android.applicationVariants,
        android.libraryVariants or android.testVariants.
        Once these methods are called, it is not possible to
        continue configuring the model.
   > Android tasks have already been created.
     This happens when calling android.applicationVariants,
     android.libraryVariants or android.testVariants.
     Once these methods are called, it is not possible to
     continue configuring the model.

* 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: 1.281 secs

Then I patched it with this:

diff --git a/xtext-android-gradle-plugin/src/main/java/org/xtext/gradle/android/XtextAndroidBuilderPlugin.xtend b/xtext-android-gradle-plugin/src/main/java/org/xtext/gradle/android/XtextAndroidBuilderPlugin.xtend
index 9388829..313578f 100644
--- a/xtext-android-gradle-plugin/src/main/java/org/xtext/gradle/android/XtextAndroidBuilderPlugin.xtend
+++ b/xtext-android-gradle-plugin/src/main/java/org/xtext/gradle/android/XtextAndroidBuilderPlugin.xtend
@@ -38,10 +38,6 @@ class XtextAndroidBuilderPlugin implements Plugin<Project> {
 	private def configureAndroid() {
 		project.afterEvaluate[
 			android = project.extensions.getByName("android") as BaseExtension
-			android.packagingOptions [
-				exclude('META-INF/ECLIPSE_.RSA')
-				exclude('META-INF/ECLIPSE_.SF')
-			]
 			variants = switch android {
 				AppExtension: android.applicationVariants as DomainObjectSet<? extends BaseVariant>
 				LibraryExtension: android.libraryVariants
@@ -50,6 +46,9 @@ class XtextAndroidBuilderPlugin implements Plugin<Project> {
 			configureOutletDefaults
 			configureGeneratorDefaults
 			configureSourceSetDefaults
+
+			// does not invoke a task
+			android.packagingOptions.excludes += 'META-INF/ECLIPSE_.*'
 		]
 	}

This way of adding the excludes:

+			android.packagingOptions.excludes += 'META-INF/ECLIPSE_.*'

does not lead to this

      > Android tasks have already been created.
        This happens when calling android.applicationVariants,
        android.libraryVariants or android.testVariants.
        Once these methods are called, it is not possible to
        continue configuring the model.

Then before I start to believe in my own problem solving abilities, this happens:

Parallel execution is an incubating feature.
:Xtendroid:preBuild UP-TO-DATE
:Xtendroid:preDebugBuild UP-TO-DATE
:Xtendroid:compileDebugNdk UP-TO-DATE
:Xtendroid:compileLint
:Xtendroid:copyDebugLint UP-TO-DATE
:Xtendroid:checkDebugManifest
:Xtendroid:preDebugAndroidTestBuild UP-TO-DATE
:Xtendroid:preDebugUnitTestBuild UP-TO-DATE
:Xtendroid:preReleaseBuild UP-TO-DATE
:Xtendroid:preReleaseUnitTestBuild UP-TO-DATE
:Xtendroid:prepareComAndroidSupportAnimatedVectorDrawable2321Library UP-TO-DATE
:Xtendroid:prepareComAndroidSupportAppcompatV72321Library UP-TO-DATE
:Xtendroid:prepareComAndroidSupportSupportV42321Library UP-TO-DATE
:Xtendroid:prepareComAndroidSupportSupportVectorDrawable2321Library UP-TO-DATE
:Xtendroid:prepareDebugDependencies
:Xtendroid:compileDebugAidl UP-TO-DATE
:Xtendroid:compileDebugRenderscript UP-TO-DATE
:Xtendroid:generateDebugBuildConfig UP-TO-DATE
:Xtendroid:generateDebugAssets UP-TO-DATE
:Xtendroid:mergeDebugAssets UP-TO-DATE
:Xtendroid:generateDebugResValues UP-TO-DATE
:Xtendroid:generateDebugResources UP-TO-DATE
:Xtendroid:mergeDebugResources UP-TO-DATE
:Xtendroid:processDebugManifest UP-TO-DATE
:Xtendroid:processDebugResources UP-TO-DATE
:Xtendroid:generateDebugXtext FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Xtendroid:generateDebugXtext'.
> com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/eclipse/jdt/internal/compiler/batch/CompilationUnit;

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':Xtendroid:generateDebugXtext'.
	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:66)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
	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.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/eclipse/jdt/internal/compiler/batch/CompilationUnit;
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2205)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3953)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4881)
	at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
	at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50)
	at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136)
	at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
	at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
	at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
	at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:890)
	at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46)
	at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50)
	at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:134)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
	at com.google.inject.Guice.createInjector(Guice.java:96)
	at com.google.inject.Guice.createInjector(Guice.java:73)
	at com.google.inject.Guice.createInjector(Guice.java:62)
	at org.eclipse.xtext.java.JavaSourceLanguageSetup.createInjector(JavaSourceLanguageSetup.java:22)
	at org.eclipse.xtext.java.JavaSourceLanguageSetup.createInjectorAndDoEMFRegistration(JavaSourceLanguageSetup.java:15)
	at org.xtext.gradle.builder.XtextGradleBuilder.<init>(XtextGradleBuilder.java:101)
	at org.xtext.gradle.builder.XtextGradleBuilderFactory.get(XtextGradleBuilderFactory.java:14)
	at org.xtext.gradle.tasks.internal.IncrementalXtextBuilderProvider.createBuilder(IncrementalXtextBuilderProvider.java:80)
	at org.xtext.gradle.tasks.internal.IncrementalXtextBuilderProvider.getBuilder(IncrementalXtextBuilderProvider.java:39)
	at org.xtext.gradle.tasks.XtextGenerate.initializeBuilder(XtextGenerate.java:378)
	at org.xtext.gradle.tasks.XtextGenerate.generate(XtextGenerate.java:112)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:245)
	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:232)
	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
	... 14 more
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/eclipse/jdt/internal/compiler/batch/CompilationUnit;
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2205)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3953)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4881)
	at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
	at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68)
	at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:74)
	at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29)
	at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37)
	at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33)
	at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3542)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2323)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2286)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
	... 49 more
Caused by: java.lang.NoClassDefFoundError: Lorg/eclipse/jdt/internal/compiler/batch/CompilationUnit;
	at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:675)
	at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:380)
	at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:164)
	at com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:613)
	at com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:569)
	at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:555)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
	at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
	at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
	at com.google.inject.internal.InjectorImpl.createProviderBinding(InjectorImpl.java:343)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:842)
	at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
	at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
	at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
	at com.google.inject.internal.SingleFieldInjector.<init>(SingleFieldInjector.java:42)
	at com.google.inject.internal.MembersInjectorStore.getInjectors(MembersInjectorStore.java:131)
	at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:98)
	at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:37)
	at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:45)
	at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:42)
	at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3542)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2323)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2286)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
	... 64 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.batch.CompilationUnit
	... 90 more


BUILD FAILED

Total time: 1.821 secs

@oehme I found a solution for one problem, now I have a ClassNotFoundException on the master branch HEAD. I committed my stuff here

I used this command to build the plugin:

./gradlew :xtext-gradle-plugin:build && \
./gradlew :xtext-android-gradle-plugin:clean :xtext-android-gradle-plugin:build :xtext-android-gradle-plugin:install -PreleaseVersion=test

I changed the dependencies.gradle on Xtendroid to:

    xtext_plugin_version = 'test' // '1.0.9' // local build: 'test'
    xtend_android_gradle_ver = xtext_plugin_version // '1.0.9'
    xtext_gradle_ver = xtext_plugin_version // '1.0.9'

Buggaboo avatar Dec 01 '16 13:12 Buggaboo

@Buggaboo It fails because you only installed half the plugin. Why do you make that invocation so complicated? You don't need multiple Gradle invocations. Also you don't need to call build explicitly, because install will already do everything it needs to create an installable.

Just run ./gradlew install -PreleaseVersion=test.

oehme avatar Dec 01 '16 14:12 oehme

The same result with ./gradlew install -PreleaseVersion=test

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Xtendroid:generateReleaseXtext'.
> com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/eclipse/jdt/internal/compiler/batch/CompilationUnit;

I overcomplicated it, because I thought it would be faster if I only built the android plugin (i.e. the 2nd line, without ./gradlew :xtext-gradle-plugin:build; but there's really no difference in speed...

Buggaboo avatar Dec 02 '16 04:12 Buggaboo

@Buggaboo Okay, I managed to get to the same issue. It's caused by one of my recent refactorings and breaks other use cases too. I'll push a fix soon.

oehme avatar Dec 02 '16 10:12 oehme

fixed in this commit

Buggaboo avatar Dec 02 '16 15:12 Buggaboo