Nền tảng: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
HĐH: Windows 7
Vì vậy, tôi có một tình huống kỳ lạ với IntelliJ khiến tôi hoàn toàn bối rối. Tôi thiết lập một dự án Maven và thêm log4j như một phần phụ thuộc trong tệp pom.xml. Các kiểm tra IDEA chạy tốt và đơn vị của tôi kiểm tra tất cả biên dịch và chạy.
Sau đó tôi đã thêm thư viện jmime của hunnysoft vào kho lưu trữ maven cục bộ của mình bằng cách sử dụng mvn install: install-file như sau.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven đã cài đặt tệp jar tốt vào kho lưu trữ cục bộ của tôi.
Sau đó, tôi đã đi vào Cài đặt của IntelliJ => Maven => Dịch vụ lưu trữ và Cập nhật kho lưu trữ cục bộ của tôi (để IntelliJ sẽ giới thiệu lại nội dung kho lưu trữ).
Cuối cùng, tôi đã thêm phần phụ thuộc sau vào tệp pom.xml của mình (ngay phía trên phần phụ thuộc log4j).
<dependency>
<groupId>jmime</groupId>
<artifactId>jmime</artifactId>
<version>3.1.1e</version>
</dependency>
Bây giờ tôi tạo một lớp mới như sau:
package com.stackoverflow.question;
import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;
public class StackOverflowQuestion {
public Field create(String name, String text) {
Logger.getLogger(getClass()).debug("create entered");
FieldBody body = new FieldBody();
body.setText(new ByteString(text));
Field field = new Field();
field.setFieldName(name);
field.setFieldBody(body);
return field;
}
}
Bây giờ cho sự kỳ lạ. Cơ chế ý định của IntelliJ chọn và nhận ra việc nhập Logger trong tệp maven pom tốt. Tuy nhiên, đối với tất cả các hunnysoft nhập, nó báo cáo: "Không thể giải quyết biểu tượng 'ByteString / Field / FieldBody'", BUT Build => Biên dịch 'StackOverflowQuestion.java' biên dịch mọi thứ chính xác và bài kiểm tra đơn vị tôi đã tạo cho lớp này chạy tốt (mặc dù các ý định đánh dấu cuộc gọi để tạo () là một khu vực có vấn đề).
Vì vậy, ở đâu đó, bằng cách nào đó IntelliJ đang bỏ qua tệp jmime.jar cho hệ thống con có ý định. Tôi bối rối vì sự phụ thuộc log4j hoạt động tốt và mọi thứ biên dịch và chạy tốt. F12 ("Đi đến Tuyên bố") hoạt động trên nhập Logger, nhưng phá vỡ tất cả các nhập khẩu jmime.
Ồ, một điều khác, nếu tôi đi đến chế độ xem 'Gói' trong cửa sổ "Dự án", gói "com.hunnysoft.jmime" xuất hiện và tôi có thể thấy TẤT CẢ các lớp tôi đã nhập trong đoạn mã ở trên trong "Thư viện" . Việc loại bỏ sự phụ thuộc ở trên khỏi tệp pom.xml khiến gói này biến mất và quá trình biên dịch bị phá vỡ.
Dường như đường dẫn lớp của kiểm tra bị hỏng, nhưng dường như không có cài đặt nào ở đây trong Cài đặt => Ý định | Các vùng biên dịch (không phải là tôi mong đợi bất kỳ cài đặt nào như vậy, tôi tin rằng IDEA đã biết đường dẫn lớp chính xác dựa trên tệp pom và JDK).
Như một thử nghiệm cuối cùng, tôi đã tạo ra một dự án ứng dụng J2SE tiêu chuẩn hoàn toàn mới (không sử dụng maven) và thêm tệp jmime.jar trực tiếp vào dự án như một trong những thư viện của nó. Tôi gặp vấn đề chính xác như được mô tả ở trên trong dự án mới này.
Đây là MANIFEST.MF từ tệp jar jmime.
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.4
Created-By: 10.0-b23 (Sun Microsystems Inc.)
Name: com/hunnysoft/jmime/
Sealed: true
Specification-Title: Hunny JMIME
Specification-Version: 3.1.1
Specification-Vendor: Hunny Software, Inc.
Implementation-Title: com.hunnysoft.jmime
Implementation-Version: 3.1.1E
Implementation-Vendor: Hunny Software, Inc.
Tôi không thấy bất cứ điều gì bất thường trong tập tin jar này.
Dự đoán tốt nhất của tôi là có lẽ vấn đề có thể là một vấn đề phụ thuộc bị thiếu. Nhưng AFAIK jmime được cho là khép kín (JarAnalyzer không đưa ra bất cứ điều gì, nhưng tôi không chắc sẽ làm gì nếu thiếu một lọ phụ thuộc).
Vì vậy, bất cứ ai có bất kỳ IDEA?