JDK 8u202中的java.lang.AssertionError

时间:2019-01-30 15:30:58

标签: java java-8

我目前正在将我的Java项目之一从JDK 1.5.0_14更新到JDK 8u202。

这是我的问题:

  • 我可以使用JDK 1.5.0_14和JDK 8u202来构建项目。

  • 但是,只要我更改一行代码(无论如何),我都会得到以下java.lang.AssertionError(请参见本文结尾)。

  • 当我降级到JDK 1.5.0_14,构建项目一次并升级到JDK 8u202时,我可以再次构建而没有任何错误。

  • 但是,再次更改任何代码行(仅一个字符)之后,我都会看到以下错误。

有人知道如何解决此问题吗?

仅供参考:我正在使用NetBeans 8.0.2。

ant -f D:\\NetBeansProjects\\MyProject -Dnb.internal.action.name=build jar
init:
Deleting: D:\NetBeansProjects\MyProject\build\built-jar.properties
deps-jar:
Updating property file: D:\NetBeansProjects\MyProject\build\built-jar.properties
Compiling 1 source file to D:\NetBeansProjects\MyProject\build\classes
An exception has occurred in the compiler (1.8.0_202). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: the -J flag should be caught by the launcher.
    at com.sun.tools.javac.main.Option$20.process(Option.java:331)
    at com.sun.tools.javac.main.Main.processArgs(Main.java:260)
    at com.sun.tools.javac.main.Main.compile(Main.java:414)
    at com.sun.tools.javac.main.Main.compile(Main.java:381)
    at com.sun.tools.javac.main.Main.compile(Main.java:370)
    at com.sun.tools.javac.main.Main.compile(Main.java:361)
    at com.sun.tools.javac.Main.compile(Main.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
    at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1159)
    at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:935)
    at org.netbeans.modules.java.source.ant.JavacTask.execute(JavacTask.java:145)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
D:\NetBeansProjects\MyProject\nbproject\build-impl.xml:910: The following error occurred while executing this line:
D:\NetBeansProjects\MyProject\nbproject\build-impl.xml:300: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 0 seconds)

这是我的build-impl.xml中的编译和JAR构建部分

    <!--
            ===================
            COMPILATION SECTION
            ===================
        -->
<target name="-deps-jar-init" unless="built-jar.properties">
    <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
    <delete file="${built-jar.properties}" quiet="true"/>
</target>
<target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
    <echo level="warn" message="Cycle detected: MyProject was already built"/>
</target>
<target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
    <mkdir dir="${build.dir}"/>
    <touch file="${built-jar.properties}" verbose="false"/>
    <property file="${built-jar.properties}" prefix="already.built.jar."/>
    <antcall target="-warn-already-built-jar"/>
    <propertyfile file="${built-jar.properties}">
        <entry key="${basedir}" value=""/>
    </propertyfile>
</target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build">
    <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
</target>
<target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
    <antcall target="clean"/>
</target>
<target depends="init,deps-jar" name="-pre-pre-compile">
    <mkdir dir="${build.classes.dir}"/>
</target>
<target name="-pre-compile">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target if="do.depend.true" name="-compile-depend">
    <pathconvert property="build.generated.subdirs">
        <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
            <include name="*"/>
        </dirset>
    </pathconvert>
    <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
</target>
<target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
    <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
    <copy todir="${build.classes.dir}">
        <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
    </copy>
</target>
<target if="has.persistence.xml" name="-copy-persistence-xml">
    <mkdir dir="${build.classes.dir}/META-INF"/>
    <copy todir="${build.classes.dir}/META-INF">
        <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
    </copy>
</target>
<target name="-post-compile">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
<target name="-pre-compile-single">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
    <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
    <j2seproject3:force-recompile/>
    <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
</target>
<target name="-post-compile-single">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
<!--
            ====================
            JAR BUILDING SECTION
            ====================
        -->
<target depends="init" name="-pre-pre-jar">
    <dirname file="${dist.jar}" property="dist.jar.dir"/>
    <mkdir dir="${dist.jar.dir}"/>
</target>
<target name="-pre-jar">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
    <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
    <touch file="${tmp.manifest.file}" verbose="false"/>
</target>
<target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
    <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
    <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
</target>
<target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
    <manifest file="${tmp.manifest.file}" mode="update">
        <attribute name="Main-Class" value="${main.class}"/>
    </manifest>
</target>
<target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
    <manifest file="${tmp.manifest.file}" mode="update">
        <attribute name="Profile" value="${javac.profile}"/>
    </manifest>
</target>
<target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
    <basename file="${application.splash}" property="splashscreen.basename"/>
    <mkdir dir="${build.classes.dir}/META-INF"/>
    <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
    <manifest file="${tmp.manifest.file}" mode="update">
        <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
    </manifest>
</target>
<target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.mkdist" name="-do-jar-copylibs">
    <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
    <echo level="info">To run this application from the command line without Ant, try:</echo>
    <property location="${dist.jar}" name="dist.jar.resolved"/>
    <echo level="info">${platform.java} -jar "${dist.jar.resolved}"</echo>
</target>
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
    <j2seproject1:jar manifest="${tmp.manifest.file}"/>
    <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
    <property location="${dist.jar}" name="dist.jar.resolved"/>
    <pathconvert property="run.classpath.with.dist.jar">
        <path path="${run.classpath}"/>
        <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
    </pathconvert>
    <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}">
        <isset property="main.class.available"/>
    </condition>
    <condition else="debug" property="jar.usage.level" value="info">
        <isset property="main.class.available"/>
    </condition>
    <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
</target>
<target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
    <delete>
        <fileset file="${tmp.manifest.file}"/>
    </delete>
</target>
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
<target name="-post-jar">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
<target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>

2 个答案:

答案 0 :(得分:0)

您好,Malawirel我不知道是否有帮助,但是如果您有一个ant项目,则问题可能出在ant项目的属性文件上。如果有的话,请检查它是否正确,一切都很好。

答案 1 :(得分:0)

我终于设法编译了它。这是我所做的:

  1. 我将源/二进制格式更改为JDK8。有关如何执行此操作,请参见Using NetBeans 8 but getting below compilation error for Lambda expression。我仍然无法编译它(在NetBeans 8.0.2中)。

  2. 我安装了NetBeans IDE 10.0,并在那里打开了项目。然后它编译没有任何问题。

所以看来这是NetBeans中的问题。