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ì?
Vui lòng giải thích những điều sau về lỗi "Không thể tìm thấy biểu tượng", "Không thể giải quyết biểu tượng" hoặc "Không tìm thấy biểu tượng":
- Có ý nghĩa gì?
- Những điều gì có thể gây ra chúng?
- Lập trình viên sẽ sửa chúng như thế nào?
Câu hỏi này được thiết kế để bắt đầu một câu hỏi và đáp toàn diện về các lỗi biên dịch phổ biến này trong Java.
Trả lời
0. Có sự khác biệt nào giữa hai lỗi không?
Không hẳn vậy. "Không thể tìm thấy biểu tượng", "Không thể giải quyết biểu tượng" và "Không tìm thấy biểu tượng" đều có nghĩa giống nhau. Các trình biên dịch Java khác nhau sử dụng các cụm từ khác nhau.
1. Lỗi "Không thể tìm thấy biểu tượng" nghĩa là gì?
Thứ nhất, đó là lỗi biên dịch 1 . Nó có nghĩa là có vấn đề trong mã nguồn Java của bạn hoặc có vấn đề trong cách bạn đang biên dịch nó.
Mã nguồn Java của bạn bao gồm những thứ sau:
- Từ khóa: như
true
,false
,class
,while
, và vân vân. - Chữ nghĩa: thích
42
và'X'
và"Hi mum!"
. - Các nhà khai thác và thẻ không tự chữ và số khác: như
+
,=
,{
, và vân vân. - Định danh: như
Reader
,i
,toString
,processEquibalancedElephants
, và vân vân. - Nhận xét và khoảng trắng.
Lỗi "Không thể tìm thấy biểu tượng" là về số nhận dạng. Khi mã của bạn được biên dịch, trình biên dịch cần tìm ra ý nghĩa của mỗi và mọi định danh trong mã của bạn.
Lỗi "Không thể tìm thấy biểu tượng" có nghĩa là trình biên dịch không thể thực hiện việc này. Mã của bạn dường như đang đề cập đến điều gì đó mà trình biên dịch không hiểu.
2. Điều gì có thể gây ra lỗi "Không thể tìm thấy biểu tượng"?
Là đơn đặt hàng đầu tiên, chỉ có một nguyên nhân. Trình biên dịch đã tìm kiếm tất cả những nơi mà mã định danh cần được xác định, và nó không thể tìm thấy định nghĩa. Điều này có thể được gây ra bởi một số thứ. Những cái chung như sau:
Đối với số nhận dạng nói chung:
- Có lẽ bạn đánh vần tên không chính xác; tức là
StringBiulder
thay vìStringBuilder
. Java không thể và sẽ không cố gắng bù đắp lỗi chính tả hoặc lỗi đánh máy. - Có lẽ bạn đã hiểu sai trường hợp; tức là
stringBuilder
thay vìStringBuilder
. Tất cả các mã định danh Java đều phân biệt chữ hoa chữ thường. - Có lẽ bạn đã sử dụng dấu gạch dưới không thích hợp; tức là
mystring
vàmy_string
khác nhau. (Nếu bạn tuân theo các quy tắc kiểu Java, bạn sẽ được bảo vệ phần lớn khỏi sai lầm này ...) - Có lẽ bạn đang cố gắng sử dụng một cái gì đó đã được khai báo là "ở một nơi khác"; tức là trong một ngữ cảnh khác với nơi bạn đã ngầm yêu cầu trình biên dịch xem xét. (Một lớp khác? Một phạm vi khác? Một gói khác? Một cơ sở mã khác?)
- Có lẽ bạn đánh vần tên không chính xác; tức là
Đối với các số nhận dạng nên tham chiếu đến các biến:
- Có lẽ bạn quên khai báo biến.
- Có lẽ khai báo biến nằm ngoài phạm vi tại thời điểm bạn đã cố gắng sử dụng nó. (Xem ví dụ bên dưới)
Đối với số nhận dạng phải là tên phương thức hoặc trường:
Có lẽ bạn đang cố gắng tham chiếu đến một phương thức hoặc trường kế thừa chưa được khai báo trong các giao diện hoặc lớp cha / tổ tiên.
Có lẽ bạn đang cố gắng tham chiếu đến một phương thức hoặc trường không tồn tại (tức là chưa được khai báo) trong kiểu bạn đang sử dụng; ví dụ:
"someString".push()
2 .Có lẽ bạn đang cố gắng sử dụng một phương thức như một trường, hoặc ngược lại; ví dụ
"someString".length
hoặcsomeArray.length()
.Có lẽ bạn đang nhầm lẫn khi thao tác trên một mảng hơn là phần tử mảng; ví dụ
String strings[] = ... if (strings.charAt(3)) { ... } // maybe that should be 'strings[0].charAt(3)'
Đối với số nhận dạng phải là tên lớp:
Có lẽ bạn đã quên nhập lớp.
Có lẽ bạn đã sử dụng nhập "sao", nhưng lớp không được xác định trong bất kỳ gói nào bạn đã nhập.
Có lẽ bạn đã quên một
new
như trong:String s = String(); // should be 'new String()'
Đối với các trường hợp mà kiểu hoặc trường hợp dường như không có thành viên mà bạn mong đợi sẽ có:
- Có lẽ bạn đã khai báo một lớp lồng nhau hoặc một tham số chung làm bóng kiểu bạn muốn sử dụng.
- Có lẽ bạn đang phủ bóng một biến tĩnh hoặc biến thể hiện.
- Có lẽ bạn đã nhập sai loại; ví dụ: do hoàn thành IDE hoặc tự động sửa.
- Có lẽ bạn đang sử dụng (biên dịch ngược lại) phiên bản API sai.
- Có lẽ bạn đã quên truyền đối tượng của mình sang một lớp con thích hợp.
Vấn đề thường là sự kết hợp của những điều trên. Ví dụ: có thể bạn đã nhập "dấu sao" java.io.*
và sau đó cố gắng sử dụng Files
lớp ... mà java.nio
không phải java.io
. Hoặc có thể bạn muốn viết File
... đó là một lớp học trong java.io
.
Dưới đây là một ví dụ về cách phạm vi biến không chính xác có thể dẫn đến lỗi "Không thể tìm thấy biểu tượng":
List<String> strings = ...
for (int i = 0; i < strings.size(); i++) {
if (strings.get(i).equalsIgnoreCase("fnord")) {
break;
}
}
if (i < strings.size()) {
...
}
Điều này sẽ đưa ra lỗi "Không thể tìm thấy biểu tượng" i
trong if
câu lệnh. Mặc dù chúng ta đã khai báo trước đó i
, nhưng khai báo đó chỉ nằm trong phạm vi của for
câu lệnh và phần thân của nó. Tham chiếu đến i
trong if
câu lệnh không thể nhìn thấy phần khai báo đó i
. Nó nằm ngoài phạm vi .
(Một sửa chữa thích hợp ở đây có thể là di chuyển if
câu lệnh bên trong vòng lặp hoặc khai báo i
trước khi bắt đầu vòng lặp.)
Dưới đây là một ví dụ gây ra sự khó hiểu trong đó lỗi đánh máy dẫn đến lỗi "Không thể tìm thấy biểu tượng" dường như không thể giải thích được:
for (int i = 0; i < 100; i++); {
System.out.println("i is " + i);
}
Điều này sẽ cung cấp cho bạn một lỗi biên dịch trong println
cuộc gọi nói rằng i
không thể tìm thấy. Nhưng (tôi nghe bạn nói) Tôi đã khai báo!
Vấn đề là dấu chấm phẩy lén lút ( ;
) trước {
. Cú pháp ngôn ngữ Java định nghĩa dấu chấm phẩy trong ngữ cảnh đó là một câu lệnh trống . Sau đó câu lệnh rỗng trở thành phần thân của for
vòng lặp. Vì vậy, mã đó thực sự có nghĩa là:
for (int i = 0; i < 100; i++);
// The previous and following are separate statements!!
{
System.out.println("i is " + i);
}
Các { ... }
khối KHÔNG phải là cơ thể của for
vòng lặp, và do đó việc khai báo trước đó của i
trong for
tuyên bố là ra khỏi phạm vi trong khối.
Đây là một ví dụ khác về lỗi "Không thể tìm thấy biểu tượng" do lỗi đánh máy.
int tmp = ...
int res = tmp(a + b);
Mặc dù đã khai báo trước, tmp
nhưng tmp(...)
biểu thức trong biểu thức là sai. Trình biên dịch sẽ tìm kiếm một phương thức được gọi tmp
và sẽ không tìm thấy một phương thức. Đã khai báo trước đó tmp
nằm trong vùng tên cho các biến, không phải vùng tên cho các phương thức.
Trong ví dụ mà tôi đã xem qua, lập trình viên đã thực sự bỏ qua một toán tử. Ý anh ấy muốn viết là:
int res = tmp * (a + b);
Có một lý do khác khiến trình biên dịch có thể không tìm thấy ký hiệu nếu bạn đang biên dịch từ dòng lệnh. Đơn giản là bạn có thể đã quên biên dịch hoặc biên dịch lại một số lớp khác. Ví dụ, nếu bạn có các lớp học Foo
và Bar
nơi Foo
sử dụng Bar
. Nếu bạn chưa bao giờ biên dịch Bar
và bạn chạy javac Foo.java
, bạn có trách nhiệm nhận thấy rằng trình biên dịch không thể tìm thấy ký hiệu Bar
. Câu trả lời đơn giản là biên dịch Foo
và Bar
cùng nhau; ví dụ javac Foo.java Bar.java
hoặc javac *.java
. Hoặc tốt hơn là vẫn sử dụng một công cụ xây dựng Java; ví dụ như Ant, Maven, Gradle, v.v.
Có một số nguyên nhân khác khó hiểu hơn ... mà tôi sẽ giải quyết bên dưới.
3. Làm cách nào để khắc phục những lỗi này?
Nói chung, bạn bắt đầu bằng cách tìm ra nguyên nhân gây ra lỗi biên dịch.
- Nhìn vào dòng trong tệp được chỉ ra bởi thông báo lỗi biên dịch.
- Xác định ký hiệu mà thông báo lỗi đang nói đến.
- Tìm hiểu lý do tại sao trình biên dịch nói rằng nó không thể tìm thấy ký hiệu; xem ở trên!
Sau đó, bạn nghĩ về những gì mã của bạn phải nói. Sau đó, cuối cùng bạn tìm ra những gì bạn cần chỉnh sửa đối với mã nguồn của mình để làm những gì bạn muốn.
Lưu ý rằng không phải mọi "sửa sai" đều đúng. Xem xét điều này:
for (int i = 1; i < 10; i++) {
for (j = 1; j < 10; j++) {
...
}
}
Giả sử rằng trình biên dịch nói "Không thể tìm thấy biểu tượng" cho j
. Có nhiều cách tôi có thể "khắc phục" điều đó:
- Tôi có thể thay đổi bên trong
for
thànhfor (int j = 1; j < 10; j++)
- có lẽ chính xác. - Tôi có thể thêm một khai báo cho
j
trướcfor
vòng lặp bên trong hoặcfor
vòng lặp bên ngoài - có thể đúng. - Tôi có thể thay đổi
j
thànhi
trongfor
vòng lặp bên trong - có thể sai! - và như thế.
Vấn đề là bạn cần hiểu mã của bạn đang cố gắng làm gì để tìm ra bản sửa lỗi phù hợp.
4. Nguyên nhân ít người biết đến
Dưới đây là một số trường hợp "Không thể tìm thấy biểu tượng" dường như không thể giải thích được ... cho đến khi bạn nhìn kỹ hơn.
Phần phụ thuộc không chính xác : Nếu bạn đang sử dụng IDE hoặc một công cụ xây dựng quản lý đường dẫn xây dựng và các phần phụ thuộc của dự án, bạn có thể đã mắc lỗi với phần phụ thuộc; Ví dụ: bỏ sót một phụ thuộc hoặc chọn phiên bản sai. Nếu bạn đang sử dụng một công cụ xây dựng (Ant, Maven, Gradle, v.v.), hãy kiểm tra tệp xây dựng của dự án. Nếu bạn đang sử dụng IDE, hãy kiểm tra cấu hình đường dẫn xây dựng của dự án.
Bạn không biên dịch lại : Đôi khi xảy ra trường hợp các lập trình viên Java mới không hiểu cách hoạt động của chuỗi công cụ Java hoặc chưa thực hiện một "quy trình xây dựng" có thể lặp lại; ví dụ: sử dụng IDE, Ant, Maven, Gradle, v.v. Trong tình huống như vậy, lập trình viên có thể đuổi theo đuôi của mình để tìm kiếm một lỗi ảo thực sự gây ra do không biên dịch lại mã đúng cách, và tương tự như vậy ...
Sự cố bản dựng trước đó : Có thể bản dựng trước đó không thành công theo cách tạo tệp JAR bị thiếu lớp. Một lỗi như vậy thường sẽ được nhận thấy nếu bạn đang sử dụng một công cụ xây dựng. Tuy nhiên, nếu bạn nhận tệp JAR từ người khác, bạn đang phụ thuộc vào việc họ xây dựng đúng cách và nhận thấy lỗi. Nếu bạn nghi ngờ điều này, hãy sử dụng
tar -tvf
để liệt kê nội dung của tệp JAR đáng ngờ.Các vấn đề về IDE : Mọi người đã báo cáo các trường hợp IDE của họ bị nhầm lẫn và trình biên dịch trong IDE không thể tìm thấy một lớp tồn tại ... hoặc tình huống ngược lại.
Điều này có thể xảy ra nếu IDE đã được định cấu hình với phiên bản JDK sai.
Điều này có thể xảy ra nếu bộ nhớ đệm của IDE không đồng bộ với hệ thống tệp. Có những cách cụ thể của IDE để khắc phục điều đó.
Đây có thể là một lỗi IDE. Ví dụ, @Joel Costigliola mô tả một tình huống trong đó Eclipse không xử lý cây "thử nghiệm" Maven một cách chính xác: hãy xem câu trả lời này .
Các vấn đề về Android : Khi bạn đang lập trình cho Android và bạn gặp phải lỗi "Không thể tìm thấy biểu tượng" liên quan đến
R
, hãy lưu ý rằng cácR
biểu tượng được xác định bởicontext.xml
tệp. Kiểm tra xemcontext.xml
tệp của bạn có đúng và ở đúng vị trí hay không, vàR
tệp lớp tương ứng đã được tạo / biên dịch chưa. Lưu ý rằng các ký hiệu Java có phân biệt chữ hoa chữ thường, vì vậy các id XML tương ứng cũng phân biệt chữ hoa chữ thường.Các lỗi biểu tượng khác trên Android có thể là do các lý do đã đề cập trước đó; ví dụ như phụ thuộc bị thiếu hoặc không chính xác, tên gói không chính xác, phương thức hoặc trường không tồn tại trong một phiên bản API cụ thể, lỗi chính tả / đánh máy, v.v.
Định nghĩa lại các lớp hệ thống : Tôi đã thấy các trường hợp trình biên dịch phàn nàn rằng đó
substring
là một ký hiệu không xác định trong một cái gì đó như sauString s = ... String s1 = s.substring(1);
Hóa ra lập trình viên đã tạo phiên bản của riêng họ
String
và phiên bản lớp của anh ta không định nghĩasubstring
phương thức.Bài học: Đừng định nghĩa các lớp của riêng bạn có cùng tên với các lớp thư viện thông thường!
Homoglyphs: Nếu bạn sử dụng mã hóa UTF-8 cho các tệp nguồn của mình, có thể có các số nhận dạng trông giống nhau, nhưng thực tế là khác nhau vì chúng chứa các ký tự đồng nhất. Xem trang này để biết thêm thông tin.
Bạn có thể tránh điều này bằng cách tự giới hạn ASCII hoặc Latin-1 làm mã hóa tệp nguồn và sử dụng Java
\uxxxx
thoát cho các ký tự khác.
1 - Nếu tình cờ, bạn làm thấy điều này trong một ngoại lệ thời gian chạy hoặc thông báo lỗi, sau đó hoặc là bạn đã cấu hình IDE của bạn để mã chạy với lỗi biên dịch, hoặc ứng dụng của bạn được tạo ra và biên dịch mã .. khi chạy.
2 - Ba nguyên tắc cơ bản của Kỹ thuật xây dựng: nước không chảy lên dốc, một tấm ván nằm nghiêng mạnh hơn và bạn không thể đẩy lên một sợi dây .
Bạn cũng sẽ gặp lỗi này nếu bạn quên new
:
String s = String();
đấu với
String s = new String();
bởi vì lệnh gọi không có new
từ khóa sẽ thử và tìm một phương thức (cục bộ) được gọi String
mà không có đối số - và chữ ký phương thức đó có thể không được xác định.
Thêm một ví dụ về 'Biến nằm ngoài phạm vi'
Như tôi đã thấy những câu hỏi kiểu đó một vài lần rồi, có thể thêm một ví dụ nữa cho những gì bất hợp pháp ngay cả khi nó có thể cảm thấy ổn.
Hãy xem xét mã này:
if(somethingIsTrue()) {
String message = "Everything is fine";
} else {
String message = "We have an error";
}
System.out.println(message);
Đó là mã không hợp lệ. Bởi vì cả hai biến được đặt tên message
đều không hiển thị bên ngoài phạm vi tương ứng của chúng - {}
trong trường hợp này sẽ là dấu ngoặc bao quanh .
Bạn có thể nói: "Nhưng một thông báo có tên biến được xác định theo cả hai cách - vì vậy thông báo được xác định sau if
".
Nhưng bạn đã nhầm.
Java không có free()
hoặc không có delete
toán tử, vì vậy nó phải dựa vào phạm vi theo dõi biến để tìm ra khi nào các biến không còn được sử dụng nữa (cùng với các tham chiếu đến các biến nguyên nhân này).
Đặc biệt tồi tệ nếu bạn nghĩ rằng bạn đã làm điều gì đó tốt. Tôi đã gặp loại lỗi này sau khi "tối ưu hóa" mã như thế này:
if(somethingIsTrue()) {
String message = "Everything is fine";
System.out.println(message);
} else {
String message = "We have an error";
System.out.println(message);
}
"Ồ, có mã trùng lặp, hãy kéo dòng chung đó ra" -> và nó ở đó.
Cách phổ biến nhất để giải quyết loại rắc rối phạm vi này là gán trước các giá trị khác cho các tên biến trong phạm vi bên ngoài và sau đó gán lại trong nếu:
String message = "We have an error";
if(somethingIsTrue()) {
message = "Everything is fine";
}
System.out.println(message);
Một cách để gặp lỗi này trong Eclipse:
- Xác định một lớp
A
trongsrc/test/java
. - Định nghĩa một lớp khác
B
trong lớpsrc/main/java
đó sử dụngA
.
Kết quả: Eclipse sẽ biên dịch mã, nhưng maven sẽ cho "Không thể tìm thấy biểu tượng".
Nguyên nhân cơ bản: Eclipse đang sử dụng một đường dẫn xây dựng kết hợp cho cây chính và cây thử nghiệm. Thật không may, nó không hỗ trợ sử dụng các đường dẫn xây dựng khác nhau cho các phần khác nhau của dự án Eclipse, đó là điều mà Maven yêu cầu.
Giải pháp :
- Đừng xác định sự phụ thuộc của bạn theo cách đó; tức là không mắc lỗi này.
- Thường xuyên xây dựng cơ sở mã của bạn bằng Maven để sớm nhận ra sai lầm này. Một cách để làm điều đó là sử dụng máy chủ CI.
"Không thể tìm thấy" có nghĩa là, trình biên dịch không thể tìm thấy biến, phương thức, lớp thích hợp, v.v. nếu bạn gặp lỗi đó, trước hết bạn muốn tìm dòng mã nơi gặp lỗi. Và sau đó bạn sẽ có thể tìm thấy biến, phương thức hoặc lớp nào chưa định nghĩa trước khi sử dụng nó. Sau khi xác nhận khởi tạo biến đó, phương thức hoặc lớp có thể được sử dụng cho các yêu cầu sau này ... Hãy xem xét ví dụ sau.
Tôi sẽ tạo một lớp demo và in tên ...
class demo{
public static void main(String a[]){
System.out.print(name);
}
}
Bây giờ hãy nhìn vào kết quả ..
Lỗi đó cho biết, "tên biến không thể tìm thấy" .. Việc xác định và khởi tạo giá trị cho biến 'tên' có thể được loại bỏ lỗi đó.. Thực tế như thế này,
class demo{
public static void main(String a[]){
String name="smith";
System.out.print(name);
}
}
Bây giờ hãy nhìn vào đầu ra mới ...
Ok Đã giải quyết thành công lỗi đó..Đồng thời, nếu bạn có thể nhận được "không thể tìm thấy phương thức" hoặc "không thể tìm thấy lớp" nào đó, Đầu tiên, hãy xác định một lớp hoặc phương thức và sau đó sử dụng ..
Nếu bạn gặp lỗi này trong bản dựng ở một nơi khác, trong khi IDE của bạn cho biết mọi thứ hoàn toàn ổn, thì hãy kiểm tra xem bạn có đang sử dụng các phiên bản Java giống nhau ở cả hai nơi hay không.
Ví dụ: Java 7 và Java 8 có các API khác nhau, vì vậy việc gọi một API không tồn tại trong phiên bản Java cũ hơn sẽ gây ra lỗi này.
GIẢI QUYẾT
Sử dụng IntelliJ
Chọn Build -> Rebuild Project sẽ giải quyết được
Tôi cũng nhận được lỗi này. (mà tôi đã truy cập vào Google và tôi đã được dẫn đến trang này)
Sự cố: Tôi đang gọi một phương thức tĩnh được định nghĩa trong lớp của một dự án A từ một lớp được xác định trong một dự án khác B. Tôi gặp lỗi sau:
error: cannot find symbol
Giải pháp: Tôi đã giải quyết vấn đề này bằng cách đầu tiên xây dựng dự án nơi phương thức được xác định, sau đó là dự án nơi phương thức được gọi từ đó.
Nếu đường dẫn xây dựng Eclipse Java được ánh xạ đến 7, 8 và trong thuộc tính Maven Project pom.xml java.version được đề cập là phiên bản Java cao hơn (9,10,11, v.v.,) hơn 7,8 thì bạn cần cập nhật trong pom. tệp xml.
Trong Eclipse nếu Java được ánh xạ tới Java phiên bản 11 và trong pom.xml, nó được ánh xạ tới phiên bản Java 8. Cập nhật hỗ trợ Eclipse lên Java 11 bằng cách thực hiện các bước dưới đây trong Trợ giúp IDE của nhật thực -> Cài đặt Phần mềm Mới ->
Dán liên kết sau http://download.eclipse.org/eclipse/updates/4.9-P-builds at Work With
hoặc là
Thêm (Cửa sổ bật lên sẽ mở ra) ->
Name:
Hỗ trợ Java 11
Location:
http://download.eclipse.org/eclipse/updates/4.9-P-builds
sau đó cập nhật phiên bản Java trong thuộc tính Maven của tệp pom.xml như bên dưới
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
Cuối cùng nhấp chuột phải vào dự án Debug as -> Maven clean, các bước xây dựng Maven
Có thể có nhiều kịch bản khác nhau như mọi người đã đề cập ở trên. Một vài điều đã giúp tôi giải quyết điều này.
Nếu bạn đang sử dụng IntelliJ
File -> 'Invalidate Caches/Restart'
HOẶC LÀ
Lớp đang được tham chiếu nằm trong một dự án khác và phần phụ thuộc đó không được thêm vào tệp xây dựng Gradle của dự án của tôi. Vì vậy, tôi đã thêm phần phụ thuộc bằng cách sử dụng
compile project(':anotherProject')
va no đa hoạt động. HTH!
bạn đã biên dịch mã của mình bằng trình biên dịch maven và sau đó sử dụng kiểm tra maven để chạy nó hoạt động tốt. Bây giờ nếu bạn thay đổi một cái gì đó trong mã của mình và sau đó không biên dịch mà bạn đang chạy nó, bạn sẽ gặp lỗi này.
Giải pháp: Một lần nữa biên dịch nó và sau đó chạy thử nghiệm. Đối với tôi, nó hoạt động theo cách này.
Trong trường hợp của tôi - tôi phải thực hiện các thao tác dưới đây:
- Di chuyển
context.xml
tập tin từsrc/java/package
đếnresource
thư mục (IntelliJ IDE) - Thư mục sạch
target
.
Để biết gợi ý, hãy xem kỹ tên lớp có lỗi và số dòng, ví dụ: Lỗi biên dịch [ERROR] \ Applications \ xxxxx.java: [44,30] error: không thể tìm thấy ký hiệu
Một nguyên nhân khác là phương pháp không được hỗ trợ của phiên bản java nói jdk7 vs 8. Kiểm tra% JAVA_HOME% của bạn
Chúng tôi đã gặp lỗi trong một dự án Java được thiết lập như một bản dựng nhiều dự án Gradle. Hóa ra là một trong những dự án con bị thiếu plugin Thư viện Java Gradle . Điều này ngăn không cho các tệp lớp của dự án con hiển thị với các dự án khác trong bản dựng.
Sau khi thêm plugin thư viện Java vào dự án build.gradle
con theo cách sau, lỗi đã biến mất:
plugins {
...
id 'java-library'
}
Tôi đã giải quyết lỗi này như thế này ... Sự điên rồ của android. Tôi có tên gói là Bộ điều hợp và tôi đã cấu trúc lại tên cho bộ điều hợp bằng "a" thay vì "A" và đã giải quyết được lỗi.