Xtendroid
Xtendroid copied to clipboard
Gradle build issue with latest gradle & plugins
Gradle build fails when using the latest Gradle, android plugin, xtend plugin. Continuation of https://github.com/tobykurien/Xtendroid/issues/88#issuecomment-262910861
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 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
.
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 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.
fixed in this commit