retrolambda преобразование из jdk 8 в байт-код Java 1.6 - PullRequest
0 голосов
/ 04 ноября 2019

Я использую net.orfjackal.retrolambda.retrolambda jar (версия 2.5.5) для конвертации jar из jdk 8 в совместимый с 1.6 jvm, который необходим одному модулю с помощью ant build.

Цель Ant

<target name="retroLambdaArchive" description="make class files compatible with 1.6 jvm needed by module">

    <property name="retroFileName" value="test.jar"/>
    <property name="retroFileName" value="MANIFEST.MF"/>
    <property name="retroClasspath" value="" />

    <delete dir="/home/tmp/retroMe/" />
    <delete dir="/home/tmp/retroMe_in/" />
    <delete dir="/home/tmp/retroMe_out/" />

    <!-- get the retrolambda jar -->
    <artifact:dependencies filesetId="retrolambda.fileset" useScope="runtime">
        <dependency groupId="net.orfjackal.retrolambda"
                    artifactId="retrolambda"
                    version="2.5.5"
                    type="jar">
        </dependency>

    </artifact:dependencies>
    <copy todir="/home/tmp/retroMe">
        <fileset refid="retrolambda.fileset" />
        <mapper type="flatten" />
    </copy>

    <unzip src="${retroFileName}" dest="/home/tmp/retroMe_in/" />
    <java classname="net.orfjackal.retrolambda.Main" fork="true" failonerror="true" classpath="/home/tmp/retroMe/retrolambda-2.5.6.jar:${retroClasspath}">
        <sysproperty key="retrolambda.inputDir" value="/home/tmp/retroMe_in/"/>
        <sysproperty key="retrolambda.classpath" value="/home/tmp/retroMe_in/"/>
        <sysproperty key="retrolambda.outputDir" value="/home/tmp/retroMe_out/"/>
        <sysproperty key="retrolambda.bytecodeVersion" value="50"/>
    </java>
    <jar destfile="50test.jar" manifest="/home/test/META-INF/MANIFEST.MF">
        <fileset dir="/home/tmp/retroMe_out/" />
    </jar>
    <delete dir="/home/tmp/retroMe/" />
    <delete dir="/home/tmp/retroMe_in/" />
    <delete dir="/home/tmp/retroMe_out/" />
</target>

Всякий раз, когда я использую лямбда-выражение в любом классе, сборка завершается с ошибкой ниже:

 [java] 00:02 ERROR: Failed to run Retrolambda
 [java] java.lang.RuntimeException: Failed to backport class: com/test/TestClass
 [java]     at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:129)
 [java]     at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:107)
 [java]     at net.orfjackal.retrolambda.Transformers.backportClass(Transformers.java:47)
 [java]     at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:94)
 [java]     at net.orfjackal.retrolambda.Main.main(Main.java:28)
 [java] Caused by: java.lang.RuntimeException: Failed to backport lambda or method reference: com/test/TestClass.lambda$appendPluginList$0(Ljava/lang/StringBuilder;Ljava/lang/String;)V (6)
...