Dies ist eine wirklich einfache Frage, und es ist wahrscheinlich eine Einstellung, von der ich nichts weiß, aber Google ist für diese Frage besonders wenig hilfreich. Sie liefert Ergebnisse zu Kompilierungsfehlern und nicht zum Ändern von Kompilierungsfehlermeldungen.
Wenn ich mein Projekt mit maven erstelle, werden Fehlermeldungen angezeigt, die ungefähr wie folgt formatiert sind:
[ERROR] /path/to/source/Main.java:[13,8] Fehler: Symbol kann nicht gefunden werden
Wenn ich mit Ant oder Javac baue, wird mir tatsächlich das Symbol angezeigt, das in der Fehlermeldung nicht gefunden werden kann. Maven gibt mir eine Zeilennummer und eine Zeichenposition, aber die Anzeige des tatsächlichen Symbols wäre hilfreicher. Die obige Zeile ist die einzige Zeile, die für jeden Fehler "Symbol kann nicht gefunden werden" angegeben wird. Es gibt keine Linie darüber oder darunter, die das Symbol angibt. Ich stelle mir vor, es muss eine Möglichkeit geben, Maven dazu zu bringen, mir diese Informationen zu sagen, aber ich weiß nicht, was es ist. Ich habe die Option -e ausprobiert, da mvn mir gesagt hat, ich solle es versuchen, aber es gab einen Maven-Traceback für den Fehler, nicht das eigentliche Symbol.
Irgendeine Hilfe?
Hier ist die Ausgabe von mvn --version
Apache Maven 3.0.4 (rNON-CANONICAL_2012-10-24_11-25_mockbuild; 2012-10-24 07:25:04-0400)
Maven home: /usr/share/maven
Java version: 1.7.0_09-icedtea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.6.6-1.fc17.x86_64", arch: "amd64", family: "unix"
Und hier ist eine beispielhafte (nicht hilfreiche) Fehlermeldung, genau wie sie von maven ausgegeben wird (nur mit verkürzten Verzeichnissen):
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /path/to/source/SoundEngineFilePanel.java:[33,8] error: cannot find symbol
[ERROR] class SoundEngineFilePanel
/path/to/source/SoundEngineFilePanel.java:[36,8] error: cannot find symbol
[INFO] 2 errors
[INFO] -------------------------------------------------------------
Die Symbole, die nicht gefunden werden können, sind "fakeThing" und "fakeThing2", nicht SoundEngineFilePanel.
quelle
javac
undAnt
tun.Antworten:
Dies ist ein Fehler im Maven-Compiler-Plugin, der sich auf JDK7 bezieht, denke ich. Funktioniert gut mit JDK6.
quelle
Update auf 3.1:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>
quelle
In meinem Fall lag das Problem in einem untergeordneten JAR, das nicht neu erstellt wurde, da ich eine neue Klasse hinzugefügt habe. Pom.xml dieses untergeordneten JARs war nicht mit meiner fehlgeschlagenen pom.xml als Child-to-Parent-Beziehung verbunden (mithilfe von
<parent>
Tag). Also habe ich das Kinderglas wieder aufgebaut, nach dem der Fehler verschwunden war.quelle
Ich hatte das gleiche Problem. Der Grund war, dass zwei JAR-Dateien nicht über die Maven-Abhängigkeit hinzugefügt wurden. Wenn ich sie ausführte
mvn compile
, zeigte die Konsole den Fehlerfehler an:Etwas reparieren:
mvn compile
quelle
Dies tritt aufgrund dieses Problems auch auf, dh beim Umpacken, das Sie in der POM-Datei definiert haben.
Entfernen Sie diese aus der POM-Datei unter dem Maven-Plugin. Es wird klappen
<executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions>
quelle
In meinem Fall habe ich eine Abhängigkeit mit dem Gültigkeitsbereich als verwendet
<scope>test</scope>
. Dadurch wurde die Klasse zur Entwicklungszeit verfügbar, aber zum Zeitpunkt der Kompilierung erhielt ich diese Nachricht.Drehen Sie den Klassenbereich, um
<scope>provided</scope>
das Problem zu lösen.quelle
Selbst wenn ich Java 7, Maven 2.2.1, verwende und den gleichen Fehler erhalte, habe ich ihn
<scope>tests</scope>
von meinem POM entfernt und verwendetmvn clean -DskipTests=true install
um meine Projekte erfolgreich zu erstellen, ohne meine Maven-Version zu aktualisieren.quelle
Wenn Sie von einem anderen Projekt im Arbeitsbereich abhängig sind und diese Projekte nicht ordnungsgemäß erstellt werden, kann ein solcher Fehler auftreten. Versuchen Sie zuerst, solche abhängigen Projekte zu erstellen. Dies kann hilfreich sein
quelle
Dies ist keine Funktion von Maven; Es ist eine Funktion des Compilers. Schau genau; Die Informationen, nach denen Sie suchen, befinden sich höchstwahrscheinlich in der folgenden Zeile.
quelle
LÖSUNG: @Vor dem Erstellen Ihrer Komponente (mit mvn clean install). Erstellen Sie das gesamte Projekt einmal und erstellen Sie Ihre Komponente erneut
WARUM SO:
Ich bekomme diesen Fehler oft. In den meisten Fällen werde ich versuchen, meine Komponente alleine zu erstellen (da ich an anderer Stelle keine Änderungen vorgenommen habe).
Richtig, aber das zusätzliche Glas, das kürzlich heruntergeladen wurde, hat möglicherweise Auswirkungen auf Änderungen, die von Dritten (innerhalb ihrer Komponente) vorgenommen wurden. Durch eine vollständige mvn-Neuinstallation des gesamten Projekts habe ich viele Male gespart
quelle
Ich vermute, der Compiler beschwert sich über eine ungültige Anmerkung. Ich habe festgestellt, dass Eclipse nicht alle Fehler anzeigt, z. B. ein Komma am Ende eines Arrays in einer Anmerkung. Aber der Standard
javac
tut es.quelle
fakeThing = new JPanel()
. Es ist nur ein Standardfehler "Symbol kann nicht gefunden werden", für den javac "fakeThing" anzeigen würde. Maven zeigt es einfach nicht.Beim Versuch, eine Maven-Installation für ein Projekt auszuführen, trat in Eclipse STS ein ähnliches Problem auf. Ich hatte einige Versionen in den Abhängigkeiten meiner Datei pom.xml für dieses Projekt und die Projekte geändert, auf die diese Abhängigkeiten verweisen. Ich habe es gelöst, indem ich eine Maven-Installation für alle Projekte ausgeführt habe, die ich geändert habe, und dann die Installation für das ursprüngliche Projekt erneut ausgeführt habe.
quelle
Ich hatte das gleiche Problem mit Maven. Es kommt vor, dass mein Problem darin bestand, dass maven die Ordner mit unterschiedlichen Fallnamen generierte. Ich hatte eine .service.MyFile erwartet, aber im Zielordner war es Service / MyFile und Java unterscheidet zwischen Groß- und Kleinschreibung. Ich habe ein paar Stunden gebraucht, um das herauszufinden. Ich empfehle Ihnen, es auszuprobieren.
quelle
Im Allgemeinen tritt dieser Fehler auf, wenn sich die Version Ihres Kompilierungscodes von der Ihres geschriebenen Codes unterscheidet. Schreiben Sie beispielsweise Code, der auf xxx-1.0.0.jar basiert, dass eine Klasse Methode A hat, die Methode jedoch in xxx-1.1.0.jar in B geändert wurde. Wenn Sie Code mit xxx-1.1.0.jar kompilieren, wird der Fehler angezeigt.
quelle
Vielleicht sollten Sie die Eigenschaften Ihrer IDE-Groß- und Kleinschreibung überprüfen. Ich hatte das gleiche Problem und löste es, indem ich Idea zwischen Groß- und Kleinschreibung unterschied (bei meinem Dateisystem wird zwischen Groß- und Kleinschreibung unterschieden): https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch
quelle