2016-07-18 25 views
3

Ich habe eine einzelne, kurze Java-Datei mit einer einzigen main Methode. Es importiert von einer Drittanbieterbibliothek, die ich thirdpartylib aufrufen werde. Ich renneJava-Compiler überschreiben und Mangeln Quelldatei

javac -classpath "../thirdpartylib/lib/*" MyClass.java 

an der Befehlszeile. Ich erhalte die folgende Befehlszeile Ausgabe:

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 

Dann, wenn ich MyClass.java wieder in meinem Editor öffnen Sie die gemeldeten Fehler, meine Java-Datei wurde zu untersuchen, wurde komplett neu geschrieben! (Mein Redakteur der Undo-Geschichte hat mich gerettet.) Der Anfang der Datei liest

# Generated by org.mangosdk.spi.processor.SpiProcessor (0.2.4) 
# Mon, 18 Jul 2016 10:10:47 -0500 

und der Rest meines Code sieht wie es wurde reihenweise in alphabetischer Reihenfolge sortiert - nicht gültig Java-Syntax, gelinde gesagt. Googeln brachte mich zu einem scheinbar defunct Paket namens SPI. Ich habe es nicht auf meinem Computer installiert, außer vielleicht, wenn thirdpartylib es verwendet, aber das erklärt nicht, warum es meinen Quellcode zerstört.

Wie kann ich mein Programm kompilieren, wenn der Compiler weiterhin meinen Quellcode löscht?

+3

Ich bin geneigt zu denken, dass Sie gute Beweise haben, dass der fragliche Annotationsprozessor tatsächlich auf Ihrem System installiert ist. Es scheint, dass es mit Java 8 nicht kompatibel ist, also finde es und werde es los. –

+3

Bis dahin spekuliere ich *, dass der Annotationsprozessor davon ausgeht, dass sich Ihre Java-Quellen in einem anderen Verzeichnis als das Arbeitsverzeichnis befinden und dass sie diese nicht absichtlich überschreiben. Wenn Sie Ihre Klassen in einem Paket platzieren, ordnen Sie die Quellen entsprechend an und führen Sie den Compiler aus dem Quell-Root aus, dann * vielleicht * vermeiden Sie das Überschreiben Ihrer Quellen, aber Sie werden wahrscheinlich immer noch keinen erfolgreichen Build erhalten. –

Antwort

3

Es sieht so aus, als ob der Klassenpfad einen Annotationsprozessor enthält. Annotation-Prozessoren sollten normalerweise nur neue Ressourcen generieren und keine vorhandenen ändern, aber sie können Dateien ändern.

Sie können versuchen, die Compileroption -proc:none zu verwenden, um die gesamte Annotationsverarbeitung zu deaktivieren.

javac -proc:none -classpath "../thirdpartylib/lib/*" MyClass.java 
+1

Hinzufügen von '-proc: none' hat den Trick gemacht. Nach dem Reparieren der "nicht gemeldeten Ausnahme", die im OP erwähnt wurde (es war nicht mit dem Annotationsprozessor verbunden), wurde das Ganze kompiliert und korrekt ausgeführt. Vielen Dank! – wkschwartz