2016-07-18 1 views
3

J'ai un seul fichier Java court avec une seule méthode main. Il importe à partir d'une bibliothèque tierce que j'appelle thirdpartylib. Je coursFichier source d'écrasement et de comparaison de compilateur Java

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

à la ligne de commande. Je reçois la sortie de ligne de commande suivante:

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 

Puis, quand j'ouvre MyClass.java de retour dans mon rédacteur en chef pour enquêter sur les erreurs signalées, mon fichier Java a été complètement réécrite! (Mon histoire undo de l'éditeur m'a sauvé.) Le haut du fichier lit

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

et le reste de mon code ressemble a été réglé sage ligne dans l'ordre alphabétique - pas la syntaxe valide Java pour dire le moins. Googling autour m'a amené à un paquet apparemment defunct appelé SPI. Je ne l'ai pas installé sur mon ordinateur, sauf peut-être si thirdpartylib l'utilise, mais cela n'explique pas pourquoi il détruit mon code source.

Comment puis-je compiler mon programme si le compilateur continue de supprimer mon code source?

+3

Je suis enclin à penser que vous avez de bonnes preuves que le processeur d'annotation en question est bien installé sur votre système. Il semble que ce soit incompatible avec Java 8, alors trouvez-le et débarrassez-vous. –

+3

Jusque-là, je * spécule * que le processeur d'annotation suppose que vos sources Java se trouvent dans un répertoire différent de celui du répertoire de travail, et qu'il ne les remplace pas intentionnellement. Si vous placez vos classes dans un paquet, organisez les sources en conséquence, et exécutez le compilateur à partir de la racine de la source puis * peut-être * vous éviterez d'écraser vos sources, mais vous n'aurez probablement toujours pas de build réussi. –

Répondre

3

Il semble que le classpath contienne un processeur d'annotation. Les processeurs d'annotation ne doivent généralement générer que de nouvelles ressources et ne pas modifier les ressources existantes, mais ils ont la possibilité de modifier les fichiers.

Vous pouvez essayer d'utiliser l'option de compilateur -proc:none pour désactiver tous les traitements d'annotation.

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

L'ajout de '-proc: none' a fait l'affaire. Après avoir corrigé l '"exception non signalée" mentionnée dans le PO (elle n'était pas liée au processeur d'annotation), l'ensemble a été compilé et exécuté correctement. Merci! – wkschwartz