Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.NoSuchMethodError running j2obcXcode in Gradle 2.8 (Regression) #566

Closed
eapache opened this issue Nov 9, 2015 · 7 comments · Fixed by #567
Closed

java.lang.NoSuchMethodError running j2obcXcode in Gradle 2.8 (Regression) #566

eapache opened this issue Nov 9, 2015 · 7 comments · Fixed by #567

Comments

@eapache
Copy link

eapache commented Nov 9, 2015

The android project is already correctly building and pulling in the shared component. Now I'm trying to build the xcode side. After running pod init in the ios directory, I run gradle j2objcXcode in android and get:

:shared:j2objcTranslatedMainLibraryExtraction UP-TO-DATE
:shared:compileJava UP-TO-DATE
:shared:processResources UP-TO-DATE
:shared:classes UP-TO-DATE
:shared:j2objcTranslatedTestLibraryExtraction UP-TO-DATE
:shared:compileTestJava UP-TO-DATE
:shared:processTestResources UP-TO-DATE
:shared:testClasses UP-TO-DATE
:shared:test UP-TO-DATE
:shared:j2objcPreBuild UP-TO-DATE
:shared:j2objcPodspec UP-TO-DATE
:shared:j2objcXcode FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':shared:j2objcXcode'.
> org.codehaus.groovy.runtime.StringGroovyMethods.replaceAll(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;

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

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':shared:j2objcXcode'.
    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:64)
    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:62)
    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:154)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    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:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47)
    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:170)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    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.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    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:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.StringGroovyMethods.replaceAll(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask$PodspecDetails.getPodMethodName(XcodeTask.groovy:106)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask.podMethodLines(XcodeTask.groovy:487)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask$_updatePodMethods_closure6.doCall(XcodeTask.groovy:453)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask.updatePodMethods(XcodeTask.groovy:452)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask.updatePodfile(XcodeTask.groovy:422)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask.writeUpdatedPodfileIfNeeded(XcodeTask.groovy:385)
    at com.github.j2objccontrib.j2objcgradle.tasks.XcodeTask.xcodeConfig(XcodeTask.groovy:197)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 57 more
@advayDev1
Copy link
Contributor

@eapache - Please post as a Gist or here your build.gradle and settings.gradle files if any, and also the outputs of the following commands:

java -version
gradle --version
./gradlew --version
javac -version

@eapache
Copy link
Author

eapache commented Nov 9, 2015

android/build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

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

android/settings.gradle:

include ':app'
includeFlat 'shared'

android/app/build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.foo.bar"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':shared')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    compile 'com.android.support:support-v4:23.1.0'
}

shared/build.gradle:

plugins {
    id 'java'
    id 'com.github.j2objccontrib.j2objcgradle' version '0.5.0-alpha'
}

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
}

j2objcConfig {
    autoConfigureDeps true
    xcodeProjectDir '../iOS'
    xcodeTargetsIos 'Foo'
    finalConfigure()
}

Versions:

$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
$ gradle --version

------------------------------------------------------------
Gradle 2.8
------------------------------------------------------------

Build time:   2015-10-20 03:46:36 UTC
Build number: none
Revision:     b463d7980c40d44c4657dc80025275b84a29e31f

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_79 (Oracle Corporation 24.79-b02)
OS:           Mac OS X 10.11.1 x86_64

$ ./gradlew --version

------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------

Build time:   2015-05-05 08:09:24 UTC
Build number: none
Revision:     5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM:          1.7.0_79 (Oracle Corporation 24.79-b02)
OS:           Mac OS X 10.11.1 x86_64

$ javac -version
javac 1.7.0_79

@eapache
Copy link
Author

eapache commented Nov 9, 2015

Oh, after noticing the gradle version differences, using ./gradlew instead of my PATH's gradle makes it work. I didn't realize those could be different, sorry for the noise.

@eapache eapache closed this as completed Nov 9, 2015
@brunobowden
Copy link
Contributor

Does this means it fails with Gradle 2.8 and works with Gradle 2.4? If so, then that's still an issue we need to understand.

This is the method that failed:

String getPodMethodName() {
    // Valid Ruby name requires replacing all non-alphanumeric characters with underscore
    return "j2objc_$projectName".replaceAll(/[^a-zA-Z0-9]/, '_')
}

Maybe it was complaining that it was doing replaceAll on a GroovyString instead of a Java String? I'm wondering if @CompileStatic needs to be applied to the inner class as well. Not sure if Gradle changed their logic in the switch to 2.8.

@eapache
Copy link
Author

eapache commented Nov 9, 2015

Does this means it fails with Gradle 2.8 and works with Gradle 2.4?

As far as I can tell; running the target via gradle (2.8) still fails with the trace I originally posted. Using 2.4 is working for me, but if you'd like me to run a few tests with 2.8 I'll do my best to help out.

@brunobowden brunobowden changed the title java.lang.NoSuchMethodError running j2obcXcode java.lang.NoSuchMethodError running j2obcXcode in Gradle 2.8 (Regression) Nov 9, 2015
@brunobowden brunobowden reopened this Nov 9, 2015
brunobowden added a commit to brunobowden/j2objc-gradle that referenced this issue Nov 9, 2015
For some reason, @CompileStatic didn’t catch this implicit type
conversion.

Fixes j2objc-contrib#566
@brunobowden
Copy link
Contributor

So this works in 2.7 and then fails in 2.8.... so a clear regression. For now, just default to Gradle 2.7 and it'll work.

@brunobowden
Copy link
Contributor

I've posted to the Gradle Forum about this regression. Not sure what the underlying cause is but my concern is that it may break other plugins. Certainly for a build system, you should be very wary of anything that's a regression.

https://discuss.gradle.org/t/compilestatic-automatic-type-conversion-failure-gradle-2-8-regression/12684

brunobowden added a commit to brunobowden/j2objc-gradle that referenced this issue Nov 10, 2015
- Gradle 2.8 build fixes (currently still built with Gradle 2.4)
- Skip @CompileStatic for testing j2objcConfig behaviour

Fixes j2objc-contrib#566
brunobowden added a commit to brunobowden/j2objc-gradle that referenced this issue Dec 16, 2015
- Gradle 2.8 build fixes (currently still built with Gradle 2.4)
- Skip @CompileStatic for testing j2objcConfig behaviour

Fixes j2objc-contrib#566
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants