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 moreSteps & 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
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={}}]}]]
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
libsfolder 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
repositoryis the folder containing the maven repo.