2013-08-07 28 views
15

Tôi có bộ xử lý chú thích sẽ tạo ra một liệt kê với các khóa được xác định bằng phương thức getter của giao diện.Không thể tải tài nguyên trong Bộ xử lý chú thích (Không phải trên đường dẫn lớp)

Giao diện nằm trong

MyProject/src/main/java/my.package.MyInterfaces.java.

Tôi muốn xác thực tệp thuộc tính cư trú trong MyProject/src/main/resources/META-INF/resource-bundle/ nếu chúng chứa các khóa được xác định trong enum được tạo.

Vấn đề của tôi là các tệp thuộc tính không có sẵn thông qua trình nạp lớp của bộ xử lý hoặc thông qua Filer.getResource (...).

  • Làm cách nào để tạo nguồn hoặc đường dẫn lớp của dự án này cho bộ xử lý để tôi có thể tải các tệp thuộc tính?

  • Bây giờ tôi chỉ có các tài nguyên trong bình chứa bộ xử lý có sẵn. Tôi đã cố gắng xác định -classpath và/hoặc -sourcepath thông qua eclipse Project/Properties/Java compiler/tùy chọn xử lý chú giải/tùy chọn bộ xử lý nhưng nó không hoạt động.

Có ai phải đối mặt với vấn đề như thế này không và ai có thể cho tôi biết cách tôi có thể cung cấp tài nguyên cho bộ xử lý không?

Tôi có cấu trúc maven nhưng không sử dụng maven do phụ thuộc cũ trong ứng dụng. Vì vậy, maven bây giờ không phải là một lựa chọn cho tôi.

Eclipse 3.6 Helios Có vẻ rằng StandardLocation.SOURCE_PATHStandardLocation.CLASS_PATH không được thực hiện trong Filer # getResource(), vì vậy văn bản nguồn hoặc lớp tập tin được tạo để SOURCE_PATH hoặc CLASS_PATH dường như không thực hiện được, cũng truy cập vào bất kỳ tập tin trên SOURCE_PATHCLASS_PATH *

Cảm ơn.

+0

Có, có vẻ như nó không được triển khai. Bất cứ ai một workaround? – Arne

+1

Bạn đã từng giải quyết vấn đề này chưa? Tôi có một vấn đề tương tự: http://stackoverflow.com/questions/29658252/how-to-obtain-the-right-javafilemanager-in-a-java-annotation-processor – jurgenv

+0

Quan trọng hơn vị trí nguồn là vị trí trong thư mục đầu ra của bạn. Bạn có kiểm tra xem tệp đó cũng nằm trong đầu ra/META-INF/resource-bundle không? Làm thế nào để bạn xây dựng? Thư mục đầu ra của bạn là gì và đường dẫn nào bạn chỉ định khi tải gói? –

Trả lời

0

Vấn đề của tôi là tệp thuộc tính không có sẵn thông qua trình nạp lớp của bộ xử lý hoặc qua Filer.getResource(...).

Tôi không chắc mình hiểu vấn đề của bạn. Nhưng có lẽ một cái gì đó ở đây sẽ giúp.

Làm cách nào để tạo nguồn hoặc đường dẫn lớp của dự án này cho bộ xử lý, để tôi có thể tải các tệp thuộc tính?

Bạn cần thêm src/main/resources làm "thư mục nguồn" trong Eclipse. Trước tiên, hãy chọn Configure Build Path trong Eclipse trên dự án Java của bạn. Sau đó chọn tab Source và nhấp vào Add Folder. Bạn sẽ có thể chọn thư mục src/main/resources và nhấp vào Ok. Bây giờ bạn sẽ thấy src/main/resources trong danh sách Thư mục nguồn.

Nếu bạn nhìn vào thư mục target/classes, bạn sẽ thấy tất cả các tệp từ thư mục tài nguyên trong đó cho bạn biết rằng chúng được sao chép chính xác vào đường dẫn lớp.

# files in the src main resources 
> ls src/main/resources/x/y/z 
jgroups_udp.xml 
# should compile into target/classes 
> ls target/classes/x/y/z 
jgroups_udp.xml org 
# and should show up in the jar 
> -tvf target/project.jar 
    0 Thu Nov 03 18:50:00 EDT 2016 META-INF/ 
135 Thu Nov 03 18:49:58 EDT 2016 META-INF/MANIFEST.MF 
... 
3036 Thu Nov 03 18:49:36 EDT 2016 x/y/z/jgroups_udp.xml 

Sau đó, trong mã của bạn, bạn có thể tham chiếu tệp bằng cách làm như sau. Thao tác này sẽ tải tệp từ đầu đường dẫn lớp. Nếu đó là trong một subdir sau đó bạn dẫn đầu với:

InputStream stream = 
    getClass().getClassLoader().getResourceAsStream("x/y/z/jgroups_udp.xml"); 

Btw, nếu bạn được sử dụng maven, bạn sẽ thêm một cái gì đó như sau để bạn pom.xml:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
</build> 
0

Là một workaround bạn có thể thử thêm classpath mà bạn cần sử dụng thông qua một đối số dòng lệnh -Xboothclasspath/a: path,/a sẽ nối thêm giá trị trong đường dẫn đến đường dẫn lớp khởi động. Bạn sẽ cần phải thêm điều này như là một tùy chọn dòng lệnh để xử lý chú thích thực tế chạy như vậy trong Eclipse sẽ là: Nhấp chuột phải vào dự án, chọn thuộc tính, Trình biên dịch Java, Xử lý chú thích, nhấp vào Mới trong bảng và thêm khóa -Xbootclasspath/a và đường dẫn để thêm làm giá trị. Tôi e rằng tôi chưa thử xử lý chú thích này nhưng đáng thử!

Các vấn đề liên quan