Java 编译器覆盖和修改源文件
Java compiler overwriting and mangling source file
我有一个简短的 Java 文件,只有一个 main
方法。它从我称之为 thirdpartylib
的第三方库导入。我运行
javac -classpath "../thirdpartylib/lib/*" MyClass.java
在命令行。我得到以下命令行输出:
warning: Supported source version 'RELEASE_6' from annotation processor 'org.mangosdk.spi.processor.SpiProcessor' less than -source '1.8'
MyClass.java:14: error: unreported exception Exception; must be caught or declared to be thrown
d.put(125, new HashSet<>(Arrays.asList(0, 1, 2)));
^
exception thrown from implicit call to close() on resource variable 'facade'
MyClass.java:39: error: unreported exception Exception; must be caught or declared to be thrown
2 errors
1 warning
然后,当我在编辑器中打开 MyClass.java
备份以调查报告的错误时,我的 Java 文件已被完全重写! (我的编辑器的撤消历史救了我。)文件的顶部显示
# Generated by org.mangosdk.spi.processor.SpiProcessor (0.2.4)
# Mon, 18 Jul 2016 10:10:47 -0500
我的其余代码看起来像是按字母顺序按行排序的——至少可以说是无效的 Java 语法。谷歌搜索让我显然 defunct package called SPI。我没有在我的电脑上安装它,除非 thirdpartylib
正在使用它,但这并不能解释为什么它会破坏我的源代码。
如果编译器不断删除我的源代码,我该如何编译我的程序?
看起来类路径包含注释处理器。注释处理器通常应该只生成新资源而不修改现有资源,但它们确实有能力更改任何文件。
您可以尝试使用编译器选项-proc:none
来禁用所有注释处理。
javac -proc:none -classpath "../thirdpartylib/lib/*" MyClass.java
我有一个简短的 Java 文件,只有一个 main
方法。它从我称之为 thirdpartylib
的第三方库导入。我运行
javac -classpath "../thirdpartylib/lib/*" MyClass.java
在命令行。我得到以下命令行输出:
warning: Supported source version 'RELEASE_6' from annotation processor 'org.mangosdk.spi.processor.SpiProcessor' less than -source '1.8'
MyClass.java:14: error: unreported exception Exception; must be caught or declared to be thrown
d.put(125, new HashSet<>(Arrays.asList(0, 1, 2)));
^
exception thrown from implicit call to close() on resource variable 'facade'
MyClass.java:39: error: unreported exception Exception; must be caught or declared to be thrown
2 errors
1 warning
然后,当我在编辑器中打开 MyClass.java
备份以调查报告的错误时,我的 Java 文件已被完全重写! (我的编辑器的撤消历史救了我。)文件的顶部显示
# Generated by org.mangosdk.spi.processor.SpiProcessor (0.2.4)
# Mon, 18 Jul 2016 10:10:47 -0500
我的其余代码看起来像是按字母顺序按行排序的——至少可以说是无效的 Java 语法。谷歌搜索让我显然 defunct package called SPI。我没有在我的电脑上安装它,除非 thirdpartylib
正在使用它,但这并不能解释为什么它会破坏我的源代码。
如果编译器不断删除我的源代码,我该如何编译我的程序?
看起来类路径包含注释处理器。注释处理器通常应该只生成新资源而不修改现有资源,但它们确实有能力更改任何文件。
您可以尝试使用编译器选项-proc:none
来禁用所有注释处理。
javac -proc:none -classpath "../thirdpartylib/lib/*" MyClass.java