cincheo / jsweet

A Java to JavaScript transpiler.
http://www.jsweet.org
Other
1.46k stars 161 forks source link

jsweet-transpiler artifacts cannot be opened by ASM #663

Closed arouel closed 3 years ago

arouel commented 3 years ago

Problem

When using recent jsweet-transpiler artifacts (versions 3.0.0, 3.1.0-SNAPSHOT) in Gradle 6.7.1 the ClassReader of ASM cannot read a class file in the JAR. After further investigation I figured that the JAR contains a Test.class file with invalid content.

Other Gradle versions are affected as well because Gradle/ASM is not failure tolerant to invalid class files.

* What went wrong:
Failed to create Jar file /Users/***/.gradle/caches/jars-8/117efba34acbd6ff63faa5dcc2adbd82/jsweet-transpiler-3.1.0-SNAPSHOT.jar.
> java.lang.IllegalArgumentException (no error message)

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

* Exception is:
org.gradle.api.GradleException: Failed to create Jar file /Users/***/.gradle/caches/jars-8/117efba34acbd6ff63faa5dcc2adbd82/jsweet-transpiler-3.1.0-SNAPSHOT.jar.
        at org.gradle.internal.classpath.ClasspathBuilder.jar(ClasspathBuilder.java:47)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.transform(InstrumentingClasspathFileTransformer.java:76)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.transform(InstrumentingClasspathFileTransformer.java:70)
        at org.gradle.internal.classpath.DefaultCachedClasspathTransformer$TransformFile.lambda$schedule$0(DefaultCachedClasspathTransformer.java:261)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(ClassReader.java:259)
        at org.objectweb.asm.ClassReader.<init>(ClassReader.java:177)
        at org.objectweb.asm.ClassReader.<init>(ClassReader.java:163)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.lambda$visitEntries$1(InstrumentingClasspathFileTransformer.java:89)
        at org.gradle.internal.classpath.ClasspathWalker.visitJarContents(ClasspathWalker.java:91)
        at org.gradle.internal.classpath.ClasspathWalker.visit(ClasspathWalker.java:55)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.visitEntries(InstrumentingClasspathFileTransformer.java:87)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.lambda$transform$0(InstrumentingClasspathFileTransformer.java:78)
        at org.gradle.internal.classpath.ClasspathBuilder.buildJar(ClasspathBuilder.java:58)
        at org.gradle.internal.classpath.ClasspathBuilder.jar(ClasspathBuilder.java:45)
        ... 6 more

Solution

The file in src/main/resources/Test.class must not be packaged in the transpiler JAR file.