To jest naprawdę proste pytanie i prawdopodobnie jest to ustawienie gdzieś, o czym nie wiem, ale Google jest szczególnie pomocne w przypadku tego pytania, podając wyniki dotyczące błędów kompilacji, a nie jak zmienić komunikaty o błędach kompilacji.
Kiedy buduję projekt za pomocą maven, otrzymuję komunikaty o błędach w przybliżeniu w następujący sposób:
[ERROR] /path/to/source/Main.java:[13,8] błąd: nie można znaleźć symbolu
Kiedy buduję za pomocą programu Ant lub javac, w rzeczywistości wyświetli się symbol, którego nie może znaleźć w komunikacie o błędzie. maven podaje numer wiersza i pozycję znaku, ale wyświetlenie rzeczywistego symbolu byłoby bardziej pomocne. Powyższa linia jest jedyną linią podaną dla każdego błędu „nie można znaleźć symbolu”. Nie ma linii powyżej lub poniżej, która daje symbol. Wyobrażam sobie, że musi być jakiś sposób, aby skłonić maven do przekazania mi tych informacji, ale nie wiem, co to jest. Wypróbowałem opcję -e, jak mvn powiedział mi, żebym spróbował jej użyć, ale dała ona mavena śledzenie błędu, a nie faktyczny symbol.
Jakaś pomoc?
Oto wynik działania 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"
A oto przykładowy (nieprzydatny) komunikat o błędzie, dokładnie taki, jaki wyświetla maven (tylko ze skróconymi katalogami):
[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] -------------------------------------------------------------
Symbole, których nie może znaleźć, to „fakeThing” i „fakeThing2”, a nie SoundEngineFilePanel.
źródło
javac
iAnt
zrób.Odpowiedzi:
To jest błąd we wtyczce kompilatora Maven, związany z JDK7. Działa dobrze z JDK6.
źródło
aktualizacja do wersji 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>
źródło
W moim przypadku problem dotyczył słoika podrzędnego, który nie został odbudowany, ponieważ dodałem nową klasę, pom.xml tego słoika podrzędnego nie był powiązany z moim nieudanym plikiem pom.xml jako relacja dziecko-rodzic (przy użyciu
<parent>
tagu). Więc odbudowałem słoik dziecka, po którym błąd zniknął.źródło
Miałem ten sam problem. Powodem było to, że miałem dwa pliki JAR, które nie zostały dodane przez zależność Maven, więc kiedy uruchomiłem
mvn compile
, konsola wyświetla błąd błędu:Naprawić to:
mvn compile
źródło
Dzieje się tak z powodu tego problemu również tj. Przepakowywania, które zdefiniowałeś w pliku POM.
Usuń to z pliku pom pod wtyczką maven. To będzie działać
<executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions>
źródło
W moim przypadku korzystałem z zależności o zakresie jako
<scope>test</scope>
. To sprawiło, że klasa była dostępna w czasie programowania, ale w czasie kompilacji otrzymałem tę wiadomość.Włącz zakres klas, aby
<scope>provided</scope>
rozwiązać problem.źródło
Nawet ja używam Java 7, maven 2.2.1 i otrzymywałem ten sam błąd, usunąłem
<scope>tests</scope>
z pom i użyłemmvn clean -DskipTests=true install
aby pomyślnie budować moje projekty bez uaktualniania mojej wersji Mavena.źródło
Jeśli jesteś zależny od innego projektu w przestrzeni roboczej i te projekty nie są poprawnie skompilowane, taki błąd może wystąpić. spróbuj najpierw zbudować takie zależne projekty, może to pomóc
źródło
To nie jest funkcja Mavena; jest to funkcja kompilatora. Przypatrz się; informacje, których szukasz, najprawdopodobniej znajdują się w następnym wierszu.
źródło
ROZWIĄZANIE: @Przed zbudowaniem komponentu (za pomocą mvn clean install). Zbuduj cały projekt raz i ponownie utwórz komponent
DLACZEGO:
wielokrotnie otrzymuję ten błąd. W większości przypadków będę próbował zbudować swój komponent samodzielnie (ponieważ nie wprowadzałem zmian w innym miejscu).
Racja, ale ten dodatkowy plik jar, który został niedawno pobrany, mógł mieć wpływ na zmiany dokonane przez osobę trzecią (w ich komponencie). Wykonanie pełnej czystej instalacji mvn na całym projekcie wiele razy mnie uratowało
źródło
Domyślam się, że kompilator skarży się na nieprawidłową adnotację. Zauważyłem, że Eclipse nie pokazuje wszystkich błędów, takich jak przecinek na końcu tablicy w adnotacji. Ale standard
javac
tak.źródło
fakeThing = new JPanel()
. To po prostu standardowy błąd „nie można znaleźć symbolu”, dla którego javac wyświetlałby „fakeThing”. maven po prostu tego nie pokazuje.Otrzymałem podobny problem w Eclipse STS podczas próby uruchomienia instalacji Mavena w projekcie. Zmieniłem kilka wersji w zależnościach mojego pliku pom.xml dla tego projektu i projektów, na które wskazywały te zależności. Rozwiązałem to, uruchamiając instalację Mavena na wszystkich projektach, które zmieniłem, a następnie ponownie uruchamiając instalację na oryginalnym.
źródło
Miałem ten sam problem z mavenem. Zdarza się, że mój problem polegał na tym, że maven generował foldery z różnymi nazwami przypadków. Spodziewałem się .service.MyFile, ale w folderze docelowym był to Service / MyFile, a java rozróżnia wielkość liter. Zajęło mi to kilka godzin, zanim się dowiedziałem, polecam to sprawdzić.
źródło
Zwykle ten błąd pojawia się, gdy wersja kodu kompilacji różni się od wersji kodu napisanego. Na przykład napisz kod, który opiera się na xxx-1.0.0.jar, że jedna klasa ma metodę A, ale metoda została zmieniona na B w xxx-1.1.0.jar. Jeśli kompilujesz kod za pomocą xxx-1.1.0.jar, zobaczysz błąd.
źródło
Być może powinieneś sprawdzić właściwości IDE z uwzględnieniem wielkości liter. Miałem ten sam problem i rozwiązałem go, rozróżniając wielkość liter w Idea (ponieważ w moim systemie plików rozróżniana jest wielkość liter): https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch
źródło