从JDK 8到Java字节码的Retrolambda转换

我正在使用net.orfjackal.retrolambda.retrolambda jar(版本2.5.5)通过使用ant build将jdk 8的jar转换为与模块所需的1.6 jvm兼容的jar。

蚂蚁目标

<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>

每当我在任何一个类中使用Lambda表达式时,构建都会因以下错误而失败:

 [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)
wuxiaolong0815 回答:从JDK 8到Java字节码的Retrolambda转换

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3167037.html

大家都在问