gradle-retrolambda icon indicating copy to clipboard operation
gradle-retrolambda copied to clipboard

Retrolambda in library projects and main projects can break the build

Open SleeplessByte opened this issue 10 years ago • 8 comments
trafficstars

I actually think this is related to #60.

Project setup:

  • library using retro lambda
  • [...]
  • main-project using retro lambda

Now from a gradle clean one always needs to build twice.

The first build will fail on main-project:compileRetrolambdaDebug

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':main-project:compileRetrolambdaDebug'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_40\bin\java.exe'' finished with non-zero exit value 1

The second build succeeds. I think it's because the repackaged files are not used the first build, but they are the second time (when it's cached due to incremental).

SleeplessByte avatar Apr 04 '15 16:04 SleeplessByte

Mind posting a little bit more info? What does your build.gradle(s) look like, and do you see exactly what exception it's failing with? (You may have to run with --info). Also, this repo has some sample projects including and android project which depends on and android lib project both with retrolambda applied. Do you see the same issue if you try to build the samples?

evant avatar Apr 05 '15 19:04 evant

Naturally. Here you can find four build.gradle files.

I don't see the exception but I will try to run it with --info

SleeplessByte avatar Apr 20 '15 20:04 SleeplessByte

13:53:31: Executing external task 'assembleDebug --info --stacktrace
Error! Failed to transform some classes
java.lang.RuntimeException: java.lang.NoClassDefFoundError: com/activeandroid/Model
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:42)
        at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.backportLambda(Backpor
tLambdaInvocations.java:139)
        at net.orfjackal.retrolambda.lambdas.BackportLambdaInvocations$InvokeDynamicInsnConverter.visitInvokeDynamicInsn
(BackportLambdaInvocations.java:128)
        at net.orfjackal.retrolambda.asm.ClassReader.readCode(ClassReader.java:1439)
        at net.orfjackal.retrolambda.asm.ClassReader.readMethod(ClassReader.java:1017)
        at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:693)
        at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:506)
        at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:90)
        at net.orfjackal.retrolambda.Transformers.backportClass(Transformers.java:37)
        at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:70)
        at net.orfjackal.retrolambda.Main.main(Main.java:26)
Caused by: java.lang.NoClassDefFoundError: com/activeandroid/Model
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at net.orfjackal.retrolambda.NonDelegatingClassLoader.loadClass(NonDelegatingClassLoader.java:25)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at net.orfjackal.retrolambda.NonDelegatingClassLoader.loadClass(NonDelegatingClassLoader.java:25)
        at sun.invoke.util.BytecodeDescriptor.parseSig(BytecodeDescriptor.java:83)
        at sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:54)
        at sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:41)
        at java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1067)
        at net.orfjackal.retrolambda.lambdas.Types.toMethodType(Types.java:26)
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.callBootstrapMethod(LambdaReifier.java:104)
        at net.orfjackal.retrolambda.lambdas.LambdaReifier.reifyLambdaClass(LambdaReifier.java:37)
        ... 10 more
Caused by: java.lang.ClassNotFoundException: com.activeandroid.Model
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at net.orfjackal.retrolambda.NonDelegatingClassLoader.loadClass(NonDelegatingClassLoader.java:27)
        ... 37 more
:evergive-heartbeat:compileRetrolambdaDebug FAILED
:evergive-heartbeat:compileRetrolambdaDebug (Thread[main,5,main]) completed. Took 1.06 secs.

com.activeandroid.Model doesn't contains retrolambda btw.

SleeplessByte avatar Apr 20 '15 21:04 SleeplessByte

I am having this exact same issue. It's not effecting us when building locally from inside Studio, but it's effecting our CI server.

What can I post to help?

wheelerruss avatar Apr 28 '15 16:04 wheelerruss

Hm, this looks related to #105, can you try the solution posted there?

evant avatar Apr 28 '15 23:04 evant

That was already in my build.gradle :(

SleeplessByte avatar Apr 29 '15 11:04 SleeplessByte

@evant that worked for me, thanks a lot

i.e. adding

retrolambda { jvmArgs '-noverify' }

wheelerruss avatar Apr 29 '15 15:04 wheelerruss

@wheelerruss

retrolambda { jvmArgs '-noverify' }

I added. but the error stil existing.

:app:compileRetrolambdaDebug Error:Could not create the Java Virtual Machine. Error:A fatal exception has occurred. Program will exit. Unrecognized option: -arg1 Error:Execution failed for task ':app:compileRetrolambdaDebug'.

Process 'command 'F:\DDH\java\jdk\bin\java.exe'' finished with non-zero exit value 1

zeshaoaaa avatar Jul 11 '16 09:07 zeshaoaaa