2013-08-07 9 views
15

Mam procesor adnotacji, który będzie generował wyliczenie za pomocą kluczy zdefiniowanych przez metody getter interfejsu.Nie można załadować zasobów w procesorze adnotacji (nie w ścieżce klas)

Interfejs polega

myProject/src/main/JAVA/my.package.MyInterfaces.java.

Chcę sprawdzić pliki właściwości, które znajdują się w MyProject/src/main/resources/META-INF/resource-bundle/, jeśli zawierają klucze zdefiniowane w wygenerowanym wyliczeniu.

Mój problem polega na tym, że pliki właściwości nie są dostępne przez moduł ładujący klasy procesora lub przez plik Filer.getResource (...).

  • Jak mogę udostępnić procesor źródłowi lub ścieżce klas tego projektu, aby móc załadować pliki właściwości?

  • Teraz mam tylko zasoby w jar, gdzie procesor jest dostępny. Próbowałem zdefiniować -classpath i/lub -sourcepath za pośrednictwem eclipse Project/Properties/Java kompilator/przetwarzanie adnotacji/opcje procesora, ale nie wyszło.

Czy ktoś napotkał problem podobny do tego i czy ktoś może mi wskazać, w jaki sposób mogę udostępnić zasoby procesorowi?

Mam strukturę maven, ale nie używam maven, ze względu na stare zależności w aplikacji. Więc maven nie jest teraz dla mnie opcją.

Eclipse 3.6 Helios Wydaje się, że StandardLocation.SOURCE_PATH i StandardLocation.CLASS_PATH nie są realizowane w FILER # getResource(), więc pisanie wygenerowanych plików źródłowych lub klasa do SOURCE_PATH lub CLASS_PATH wydaje się nie być możliwe, także dostęp do wszystkich plików na SOURCE_PATH i CLASS_PATH *

Dzięki.

+0

Tak, wygląda na to, że nie jest zaimplementowany. Ktoś obejść? – Arne

+1

Czy każdy rozwiązał ten problem? Mam podobny problem: http://stackoverflow.com/questions/29658252/how-to-obtain-the-right-javafilemanager-in-a-java-annotation-processor – jurgenv

+0

Ważniejsze niż lokalizacja źródłowa jest lokalizacja w folderze wyjściowym. Czy sprawdziłeś, czy plik znajduje się również w pliku wyjściowym/META-INF/pakiecie zasobów? Jak budujesz? Jaki jest twój folder wyjściowy i którą ścieżkę określasz przy ładowaniu pakietu? –

Odpowiedz

0

Mój problem polega na tym, że pliki właściwości nie są dostępne przez program ładujący klasy procesora lub przez Filer.getResource(...).

Nie jestem pewien, czy rozumiem Twój problem. Ale może coś tu pomoże.

Jak mogę udostępnić procesor źródłowi lub ścieżce klas tego projektu, aby móc załadować pliki właściwości?

Musisz dodać src/main/resources jako "folder źródłowy" w środowisku Eclipse. Najpierw wybierz Configure Build Path w Eclipse na twoim projekcie Java. Następnie wybierz zakładkę Source i kliknij Add Folder. Powinieneś być w stanie wybrać folder src/main/resources i kliknąć Ok. Powinieneś teraz zobaczyć src/main/resources na liście folderów źródłowych.

Jeśli zajrzysz do swojego katalogu target/classes, powinieneś zobaczyć wszystkie pliki z tamtejszego katalogu zasobów, który informuje, że zostały one poprawnie skopiowane do ścieżki klas.

# 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 

Następnie w swoim kodzie możesz odwołać się do pliku, wykonując następujące czynności. Spowoduje to załadowanie pliku z góry ścieżki klasy. Jeśli jest w podkatalogu następnie prowadzić z:

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

Btw, jeśli zostały użyciu Maven, należy dodać coś takiego do ciebie pom.xml:

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

Jako obejście ty może spróbować dodać ścieżkę klas, której należy użyć poprzez argument wiersza poleceń -Xboothclasspath/a: path,// ​​doda wartość w ścieżce do ścieżki klasy boot. Będziesz musiał dodać to jako opcję wiersza poleceń do faktycznego przetwarzania przetwarzania adnotacji, więc w Eclipse będzie to: Kliknij prawym przyciskiem myszy projekt, wybierz właściwości, Kompilator Java, Przetwarzanie adnotacji, kliknij Nowy w tabeli i dodaj klucz -Xbootclasspath/a i ścieżkę do dodania jako wartość. Obawiam się, że nie próbowałem tego do przetwarzania adnotacji, ale warto spróbować!

Powiązane problemy