maven "không thể tìm thấy biểu tượng" thông báo vô ích


81

Đây là một câu hỏi thực sự đơn giản và có thể đó là một cài đặt ở đâu đó tôi không biết, nhưng Google đặc biệt không hữu ích cho câu hỏi này, đưa ra kết quả về lỗi biên dịch chứ không phải cách thay đổi thông báo lỗi biên dịch.

Khi tôi xây dựng dự án của mình bằng maven, nó sẽ cung cấp cho tôi các thông báo lỗi được định dạng gần như sau:

[ERROR] /path/to/source/Main.java:[13,8] error: không thể tìm thấy ký hiệu

Khi tôi xây dựng bằng ant hoặc javac, nó sẽ thực sự cho tôi biết ký hiệu mà nó không thể tìm thấy trong thông báo lỗi. maven cung cấp cho tôi số dòng và vị trí ký tự, nhưng hiển thị biểu tượng thực tế sẽ hữu ích hơn. Dòng trên là dòng duy nhất cho mỗi lỗi "không thể tìm thấy biểu tượng". Không có dòng nào ở trên hoặc dưới cho ký hiệu. Tôi tưởng tượng phải có cách nào đó để maven cho tôi biết thông tin đó, nhưng tôi không biết nó là gì. Tôi đã thử tùy chọn -e, như mvn đã nói với tôi rằng hãy thử sử dụng nó, nhưng nó đưa ra một dấu vết maven cho lỗi, không phải biểu tượng thực tế.

Bất kỳ giúp đỡ?

Đây là kết quả của 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"

Và đây là một ví dụ thông báo lỗi (không hữu ích), chính xác như đầu ra của maven (chỉ với các thư mục được rút ngắn):

[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] -------------------------------------------------------------

Các ký hiệu mà nó không thể tìm thấy là "fakeThing" và "fakeThing2", không phải SoundEngineFilePanel.


Bạn có thể cung cấp một số thông tin về phiên bản (cụ thể là Maven), v.v.? Đây không phải là những gì xảy ra với tôi.
Dave Newton

Đúng là thông báo "không thể tìm thấy biểu tượng" của maven không hữu ích lắm. Tôi có thể cho bạn biết trường hợp của tôi, trong đó mã của tôi đã sử dụng một phương thức cụ thể của thư viện bên thứ ba trong một thời gian dài nhưng bằng cách nào đó phương thức này đã bị xóa khỏi thư viện của bên thứ ba. Khi maven biên dịch mã, nó đã bị lỗi. Nếu thông báo là "không tìm thấy phương pháp" thay vì "không tìm thấy biểu tượng" thì nó sẽ rất hiệu quả và ít tốn thời gian hơn.
Atul S.

Cho những người cảm thấy muốn thêm một câu trả lời khác cho câu hỏi này. Đọc kỹ câu hỏi. Nó KHÔNG phải về cách sửa lỗi biên dịch "không thể tìm thấy biểu tượng" (trong Maven). Đó là về cách để Maven đưa ra các thông báo lỗi biên dịch nhiều thông tin hơn ; tức là các thông báo bao gồm ngữ cảnh mã nguồn ... thích javacAntlàm.
Stephen C

Câu trả lời:


41

Đây là một lỗi trong plugin trình biên dịch Maven, liên quan đến JDK7, tôi nghĩ. Hoạt động tốt với JDK6.


5
Có vẻ như đã được sửa trong maven-compiler-plugin 3.1. Xem câu trả lời của george-papatheodorou .
Jared Beck

28
Đây không phải là một giải pháp .. lỗi biên dịch vẫn đang xảy ra trong java 8.
Eta

Bắt đầu xảy ra khi Windows 10 gặp sự cố. Đó có thể là một yếu tố?
TheRealChx101

1
Gửi đến @Eta (và 27 người khác đã +1 nhận xét ở trên) - Tôi nghĩ bạn đang thiếu điểm. Câu hỏi này là về những tin nhắn vô ích từ Maven. Câu trả lời này nói về cách làm cho các thông báo lỗi biên dịch hữu ích hơn. Nó không khắc phục được sự cố gây ra lỗi biên dịch ngay từ đầu. Vấn đề đó là (thường) trong mã nguồn của bạn! Xem Lỗi “Không thể tìm thấy biểu tượng” hoặc “Không thể giải quyết biểu tượng” nghĩa là gì? .
Stephen C

35

cập nhật lên 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>

Cách tốt nhất để xác định phiên bản mới nhất của plugin này là gì? Tất cả những gì tôi có thể tìm thấy là trang này: maven.apache.org/plugins/maven-compiler-plugin/… Cảm ơn.
Jared Beck,

@JaredBeck có vẻ như bạn có thể tìm thấy điều đó tại đây: mvnrepository.com/artifact/org.apache.maven.plugins/…
DSimon

6

Trong trường hợp của tôi, sự cố nằm trong một jar con không được tạo lại vì tôi đã thêm một lớp mới, pom.xml của jar con đó không liên quan đến pom.xml bị lỗi của tôi dưới dạng quan hệ con-cha (sử dụng <parent>thẻ). Vì vậy, tôi đã xây dựng lại jar con sau đó lỗi đã biến mất.


Đây cũng là vấn đề của tôi. Mặc dù chắc chắn có những lỗi đang tồn tại trong Maven, nhưng tôi hy vọng rằng trong hầu hết các trường hợp, lỗi của Maven hoặc các vấn đề về bản dựng được giải thích bằng các tình huống như thế này.
Michael M

4

Tôi đã từng gặp vấn đề tương tự. Lý do là tôi có hai tệp JAR không được thêm thông qua phụ thuộc Maven, vì vậy khi tôi chạy mvn compile, bảng điều khiển hiển thị lỗi lỗi:

Không tìm thấy ký hiệu, Lớp ... ”.

Để sửa chữa nó:

  1. Xóa các tệp JAR khỏi đường dẫn xây dựng
  2. Thêm vào đường dẫn xây dựng
  3. Chạy mvn compile

2
Bạn có thể vui lòng liệt kê các bước mà bạn đã sử dụng để xóa các tệp JAR khỏi đường dẫn xây dựng của mình không? Vì tôi gặp phải lỗi tương tự khi cố xóa thư mục đích của mình và biên dịch lại bằng maven? Cảm ơn
turnip424

3

Điều này xảy ra do vấn đề này cũng có nghĩa là đóng gói lại mà bạn đã xác định trong tệp POM.

Xóa cái này khỏi tệp pom trong plugin maven. Nó sẽ hoạt động

<executions>
    <execution>
        <goals>
             <goal>repackage</goal>
        </goals>
    </execution>
</executions>

3

Trong trường hợp của tôi, tôi đang sử dụng phạm vi phụ thuộc là <scope>test</scope>. Điều này làm cho lớp có sẵn tại thời điểm phát triển, nhưng tại thời điểm biên dịch, tôi nhận được thông báo này.

Chuyển phạm vi lớp để <scope>provided</scope>giải quyết vấn đề.


2

Ngay cả khi tôi đang sử dụng Java 7, maven 2.2.1 và gặp lỗi tương tự, tôi đã gỡ bỏ <scope>tests</scope>pom của mình và sử dụng

mvn clean -DskipTests=true install để xây dựng thành công các dự án của tôi mà không cần nâng cấp phiên bản maven của tôi.


"mvn clean -DskipTests = true" cài đặt là một lệnh kỳ diệu! Thx để chia sẻ. (BTW Tôi không chạm vào <scope> các bài kiểm tra </scope> của mình)
Eta

1

nếu bạn đang phụ thuộc vào một số dự án khác trong không gian làm việc và các dự án này không được xây dựng đúng cách, lỗi như vậy có thể xảy ra. thử xây dựng các dự án phụ thuộc như vậy trước, nó có thể hữu ích


0

Đây không phải là một chức năng của Maven; nó là một chức năng của trình biên dịch. Nhìn kĩ; thông tin bạn đang tìm kiếm rất có thể nằm ở dòng sau.


Tôi đã nhận được cùng một lỗi. Lỗi tiếp theo là tên của một phụ thuộc bị thiếu trong dự án (trong trường hợp này là một lớp thư viện org.apache.poi.xssf).
John

0

GIẢI PHÁP: @Trước khi xây dựng thành phần của bạn (sử dụng mvn clean install). Xây dựng toàn bộ dự án một lần và xây dựng lại thành phần của bạn

TẠI SAO VẬY:
Tôi gặp lỗi này nhiều lần. Hầu hết các lần tôi sẽ cố gắng xây dựng thành phần của mình một mình (Vì tôi chưa thực hiện thay đổi ở nơi khác).

Đúng, Nhưng jar bổ sung đã được tải xuống gần đây có thể đã bị ảnh hưởng bởi những thay đổi do bên thứ ba thực hiện (bên trong thành phần của họ). Thực hiện cài đặt sạch mvn đầy đủ trên toàn bộ dự án đã giúp tôi tiết kiệm nhiều lần


-1

Tôi đoán rằng trình biên dịch đang phàn nàn về một chú thích không hợp lệ. Tôi nhận thấy rằng Eclipse không hiển thị tất cả các lỗi, chẳng hạn như dấu phẩy ở cuối mảng trong chú thích. Nhưng tiêu chuẩn javacthì có.


Dòng mà nó phàn nàn là fakeThing = new JPanel(). Đó chỉ là lỗi "không thể tìm thấy biểu tượng" tiêu chuẩn mà javac sẽ hiển thị "fakeThing". maven chỉ không hiển thị nó.
mattg

-1

Tôi đã gặp sự cố tương tự trong Eclipse STS khi cố gắng chạy cài đặt Maven trên một dự án. Tôi đã thay đổi một số phiên bản trong các phần phụ thuộc của tệp pom.xml của mình cho dự án đó và các dự án mà các phần phụ thuộc đó trỏ đến. Tôi đã giải quyết nó bằng cách chạy cài đặt Maven trên tất cả các dự án tôi đã thay đổi và sau đó chạy lại cài đặt trên dự án ban đầu.


-1

Tôi đã có cùng một vấn đề với maven. Nó xảy ra rằng vấn đề của tôi là, maven đã tạo ra các thư mục với các tên trường hợp khác nhau. Tôi đã mong đợi một .service.MyFile nhưng trong thư mục đích, nó là Service / MyFile và java phân biệt chữ hoa chữ thường. Tôi đã mất vài giờ để tìm hiểu, khuyên bạn nên xem thử.


-1

Nói chung, lỗi này sẽ xuất hiện khi phiên bản mã biên dịch của bạn khác với mã đã viết của bạn. Ví dụ: viết mã dựa trên xxx-1.0.0.jar rằng một lớp có phương thức A, nhưng phương thức đã thay đổi thành B trong xxx-1.1.0.jar. Nếu bạn biên dịch mã với xxx-1.1.0.jar, bạn sẽ thấy lỗi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.