Maven: Как мой моджо может получить доступ к собственным ресурсам?

У меня есть проект (здесь он называется my-artifact), который должен генерировать источники из файла модели. Я создал maven-plugin (my-code-generator), который используется, как описано в приведенном ниже фрагменте pom.xml. Он загружает и обрабатывает model.xml из ресурсов my-artifact и генерирует код, используя некоторые предопределенные шаблоны, хранящиеся в плагине. Вопрос в том, как my-code-generator может получить доступ к этим шаблонам, поскольку они находятся не в ресурсах проекта, а в его собственных ресурсах.

заранее спасибо

‹Plugin›
‹groupId› моя-группа ‹/groupId›
‹artifactId› мой-генератор кода ‹/artifactId›
‹version› 0.0.1-SNAPSHOT ‹/version›
‹ конфигурация ›
‹modelfile›
src / main / resources / model.xml
‹/modelDir›
‹/configuration›
‹executions›
‹execution›
‹ этап ›генерировать-источники ‹/phase›
‹goals›
‹goal› генерировать-модель ‹/goal›
‹/goals›
‹/execution›
‹/executions› < br> ‹/plugin›
‹plugin›
‹groupId› org.codehaus.mojo ‹/groupId›
‹artifactId› build-helper-maven-plugin ‹/artifactId›
‹executions›
‹execution›
‹id› add-source ‹/id›
‹phase› generate-sources ‹/phase›
‹goals›
‹Goal› add-source ‹/goal›
‹sources›
‹source› цель / сгенерированные источники ‹/source›
‹/sources›
‹/configuration›
‹/ исполнение ›
‹/executions›
‹/plugin›


person anonymous    schedule 20.02.2010    source источник
comment
@anonymous, значит, шаблоны находятся внутри вашего собственного плагина Maven?   -  person Verhagen    schedule 20.02.2010


Ответы (2)


Просто используйте ClassLoader, чтобы получить ресурсы из плагина MyCodeGenerator Maven.

Добавьте что-то подобное в свой MyCodeGeneratorMojo

    URL getTemplate(String fileName) {
        return this.getClass().getResource(fileName);
    }

В подключаемом модуле MyCodeGenerator Maven добавьте шаблон (ы) в каталог src/main/resources (не забудьте использовать правильную запись пакета (каталоги) в этом каталоге).

person Verhagen    schedule 20.02.2010

Включая их в файл jar для плагина и ссылаясь на них через classpath, через ClassLoader.getResourceAsStream.

Упаковывая их как еще один артефакт, объявляя их как зависимости и вызывая API разрешения зависимостей, что требует гораздо больше работы.

person bmargulies    schedule 20.02.2010
comment
спасибо, getClass (). getResourceAsStream (template.tmpl) сработал для меня. - person anonymous; 21.02.2010