我有一个带有单个main方法的简短Java文件.它从第三方库(我将称为第三方库)导入.我跑
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语法.到处搜寻让我找到了一个名为SPI的defunct软件包.我没有将其安装在计算机上,除非也许thirdpartylib正在使用它,但这并不能解释为什么它破坏了我的源代码.
如果编译器不断删除源代码,如何编译程序?
解决方法:
看起来classpath包含注释处理器.注释处理器通常应仅生成新资源,而不修改现有资源,但它们确实具有更改任何文件的能力.
您可以尝试使用编译器选项-proc:none禁用所有注释处理.
javac -proc:none -classpath "../thirdpartylib/lib/*" MyClass.java