我有一個單一的,簡短的Java文件和一個main
方法。它從第三方庫中導入,我將其稱爲thirdpartylib
。我在命令行運行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語法,至少可以說。谷歌搜索讓我看到一個明顯defunct包叫SPI。我沒有在我的電腦上安裝它,除非thirdpartylib
正在使用它,但這並不能解釋它爲什麼會破壞我的源代碼。
如果編譯器不斷刪除我的源代碼,我該如何編譯我的程序?
我傾向於認爲您有充分的證據證明註釋處理器確實安裝在您的系統上。它看起來與Java 8不兼容,所以找到並擺脫它。 –
在此之前,我*推測*註釋處理器假定您的Java源位於與工作目錄不同的目錄中,並且它不會有意覆蓋它們。如果你把你的類放在一個包中,相應地安排源代碼,然後從源代碼根目錄運行編譯器,然後*可能*你會避免覆蓋你的源代碼,但是你可能仍然無法成功構建。 –