2013-08-07 1 views
15

У меня есть обработчик аннотации, который должен генерировать перечисление с ключами, определяемыми методами getter интерфейса.Не удается загрузить ресурсы в обработчике аннотации (не на пути к классам)

Интерфейс находится в

MyProject/SRC/основной/Java/my.package.MyInterfaces.java.

Я хочу проверить свойства файлов, которые находятся в MyProject/src/main/resources/META-INF/resource-bundle/, если они содержат ключи, определенные в сгенерированном перечислении.

Моя проблема в том, что файлы свойств недоступны через загрузчик классов процессора или через Filer.getResource (...).

  • Как я могу сделать источник или путь к классу этого проекта доступным для процессора, чтобы я мог загружать файлы свойств?

  • Теперь у меня есть только ресурсы в банке, где находится процессор. Я попытался определить -classpath и/или -sourcepath через eclipse Project/Properties/Java компилятор/Обработка аннотации/Параметры процессора, но это не сработало.

Неужели кто-нибудь сталкивался с такой проблемой, и может ли кто-нибудь дать мне понять, как я могу сделать ресурсы доступными для процессора?

У меня есть структура maven, но я не использую maven из-за старых зависимостей внутри приложения. Так что maven теперь не вариант для меня.

Затмение 3,6 Helios Кажется, что StandardLocation.SOURCE_PATH и StandardLocation.CLASS_PATH не реализованы в Filer # getResource(), так что написание сгенерированные исходные или файлы классов в SOURCE_PATH или CLASS_PATH кажется не возможным, а также доступ к любым файлам на SOURCE_PATH и CLASS_PATH *

Спасибо.

+0

Да, похоже, что это не реализовано. Любой обходной путь? – Arne

+1

Вы каждый раз решаете эту проблему? У меня есть аналогичная проблема: http://stackoverflow.com/questions/29658252/how-to-obtain-the-right-javafilemanager-in-a-java-annotation-processor – jurgenv

+0

Более важным, чем расположение источника, является местоположение в вашей выходной папке. Вы проверили, что файл также находится в выводе/META-INF/resource-bundle? Как вы строите? Какова ваша папка вывода и какой путь вы указываете при загрузке пакета? –

ответ

0

Моя проблема заключается в том, что файлы свойств недоступны через загрузчик классов процессора или через Filer.getResource(...).

Я не уверен, что понимаю вашу проблему. Но, возможно, что-то здесь поможет.

Как я могу сделать источник или путь к классам этого проекта доступным для процессора, чтобы я мог загружать файлы свойств?

Вам необходимо добавить src/main/resources в качестве «исходной папки» в Eclipse. Сначала выберите Configure Build Path в Eclipse в вашем проекте Java. Затем выберите вкладку Source и нажмите Add Folder. Вы должны иметь возможность выбрать папку src/main/resources и нажать Ok. Теперь вы должны увидеть src/main/resources в списке «Исходные папки».

Если вы заглянете в свой каталог target/classes, вы должны увидеть все файлы из каталога ресурсов, который позволяет вам знать, что они были скопированы в путь к классам правильно.

# 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 

Тогда в вашем коде вы можете ссылаться на файл, выполнив следующее. Это загрузит файл из верхней части пути к классам. Если он находится в подкаталоге, то ты ведешь с:

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

Btw, если вы были с помощью Maven, вы бы добавить что-то вроде следующего вам pom.xml:

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

В качестве обходного пути вы может попытаться добавить путь к классу, который вам нужно использовать с помощью аргумента командной строки -Xboothclasspath/a: path,/a добавит значение в путь к пути к классу загрузки. Вам нужно будет добавить это как параметр командной строки для фактического запуска обработки аннотации, поэтому в Eclipse это будет: Щелкните правой кнопкой мыши проект, выберите свойства, Компилятор Java, Обработка аннотаций, нажмите «Создать» в таблице и добавьте ключ -Xbootclasspath/a и путь для добавления в качестве значения. Боюсь, я не пробовал это для обработки аннотаций, но стоит попробовать!

Смежные вопросы