Realm-java: Issue compiling with Realm 1.2.0 in RealmTransformer

Created on 26 Aug 2016  ·  12Comments  ·  Source: realm/realm-java

Goal

Including Realm 1.2.0 in an Android project

Expected Results

Compilation should be successful and painless

Actual Results

Compilation fails due to an issue with the transformer, producing the following stack trace:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithRealmTransformerForUatDebug'.
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.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:212)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:205)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: groovy.lang.MissingMethodException: No signature of method: static io.realm.transformer.RealmTransformer.getClassNames() is applicable for argument types: (com.google.common.collect.SingletonImmutableList) values: [[ImmutableTransformInput{rootLocation=null, jarInputs=[], folderInputs=[ImmutableDirectoryInput{name=ae6d604fae45d8c6e5ee08311ff627e9a4179a98, file=//app/build/intermediates/classes/uat/debug, contentTypes=CLASSES, scopes=PROJECT, changedFiles={}}]}]]
at io.realm.transformer.RealmTransformer.transform(RealmTransformer.groovy:87)
at com.android.build.api.transform.Transform.transform(Transform.java:308)
at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:178)
at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:174)
at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:173)
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)
... 60 more

Steps & Code to Reproduce

Tried with some different Realm versions and Guava versions to see if it could be related, but no luck so far.

Version of Realm and tooling

Realm version(s): 1.2.1

Android Studio version: 2.2 beta2
Gradle Version: 2.14.1
Android Gradle Plugin Version: 2.1.3

T-Help

Most helpful comment

The problem was that for a given network it was impossible to reach jcenter() due to the security policies in place.

For some reason just copy/pasting the Realm AAR/Jars into a libs folder did not work (Not entirely sure yet why).

The workaround was to create a local maven repository that mirrored the folder structure you see in e.g ~/.m2/ on Mac OS X.

The top-level gradle file should then look something like this, where repository is the folder containing the maven repo.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        maven {
            url "$rootDir/repository"
        }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
        classpath 'io.realm:realm-gradle-plugin:2.0.0-SNAPSHOT'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    println rootDir;
    repositories {
        maven {
            url "$rootDir/repository"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

All 12 comments

If you use SingletonImmutableList anywhere in your project related to using any RealmObjects with it, can you please show the code for that section?

@Zhuinden Hi. This happens with the library just included in the project. No actual reference to Realm anywhere at all, just the initial set up to start integrating it. (So it's pretty much just the inclusion of the classpath dependency on the main build.gradle, plus the apply of the realm plugin on the app level build.gradle. Might be related to the gradle + android gradle plugin versions?

Hmm.... I won't be able to solve this issue (I am not a Realm member :tongue:), but I think if you specify your dependencies and plugins and whether you use databinding for example, that would help them greatly

The best thing though would be a minimal project that reproduces this issue and sent to help[at]realm.io

@Disruption Yes, we would be happy if you can create a small sample project which demonstrates the issue.

@kneth Is there any email I can drop you a quick letter to? We have a bit of special set up, but I can not disclose publicly the details unfortunately. Thanks for the quick answer!

It's help[at]realm.io

@Zhuinden Thanks! Will ping them now.

@Disruption Are you able to make a sample project to reproduce this issue?

@beeender Hi! I mailed [email protected] and we got it sorted out with some tweaks to the set up. @cmelchior can probably give more info on the status, but I think we can close this. Might be nice to include the work around I had to use somewhere though, as it's not totally trivial and some other people might hit the same issue.

Cheers!

That sounds particularly interesting. I'm not sure what was able to break here.

The problem was that for a given network it was impossible to reach jcenter() due to the security policies in place.

For some reason just copy/pasting the Realm AAR/Jars into a libs folder did not work (Not entirely sure yet why).

The workaround was to create a local maven repository that mirrored the folder structure you see in e.g ~/.m2/ on Mac OS X.

The top-level gradle file should then look something like this, where repository is the folder containing the maven repo.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        maven {
            url "$rootDir/repository"
        }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
        classpath 'io.realm:realm-gradle-plugin:2.0.0-SNAPSHOT'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    println rootDir;
    repositories {
        maven {
            url "$rootDir/repository"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

@cmelchior I have the same problem. I try to use Snapshots(maven),but it's not work.

Error:Execution failed for task ':app:transformClassesWithRealmTransformerForRelease'.

No signature of method: static io.realm.transformer.RealmTransformer.getClassNames() is applicable for argument types: (com.google.common.collect.SingletonImmutableList) values: [[ImmutableTransformInput{rootLocation=null, jarInputs=[], folderInputs=[ImmutableDirectoryInput{name=0d632331e2924209b96be4093163fd325fd5a584, file=G:\HM\HeMuFaimly-Android\app\build\intermediates\classes\release, contentTypes=CLASSES, scopes=PROJECT, changedFiles={}}]}]]

Was this page helpful?
0 / 5 - 0 ratings