Можете ли вы преобразовать файлы Maven pom.xml в фрагменты XML для повторного использования? - PullRequest
7 голосов
/ 09 мая 2011

В Maven возможно ли преобразовать часто повторяющиеся фрагменты в повторно используемую «библиотеку» (плагин)?Я понимаю, что могу писать свои собственные плагины, но часто функциональность, которую я хочу использовать повторно, уже выражена в виде фрагментов в pom.xml, и я склоняюсь к тому, что механизм повторного использования должен сохранять эти фрагменты как XML.

Показательный пример Я использовал процедуру (, частично описанную здесь ) для генерации файла WADL из Джерси / JAX-RSисходный код, а затем генерирование документации разработчика из этого WADL и собственного Javadoc исходного кода.Процедура на этой странице описывает выполнение двух плагинов, и я использую третий плагин (org.codehaus.mojo: exec-xsltproc) и мой собственный XSL-файл, чтобы превратить WADL в HTML.

I 'Мы использовали эту процедуру в нескольких проектах Maven.Образец входит в 100 строк XML .Что меняется между проектами, так это просто имя пакета исходного кода, о котором идет речь (com.example.myapp.rest в связанном шаблоне).Поэтому невозможно переместить это в родительский pom или любой другой механизм, который не позволяет параметризацию.

Что я хочу , это объединить, вывести из шаблона или иным образом рефакторировать те100 строк (и один файл XST) в одном месте.Я понимаю, что maven многократного использования доставляется через плагины Maven.В идеале мне не пришлось бы писать какую-либо Java (или Groovy) только для того, чтобы повторно выразить то, что я уже выразил в XML.

Можно ли реорганизовать файлы Maven pom.xml как XML?

Ответы [ 4 ]

4 голосов
/ 09 мая 2011

Вы правы, что это не так просто, как должно быть.«mixins» - которые описывают именно эту возможность - уже некоторое время присутствуют в дорожной карте Maven.

Вы можете использовать родительский POM, чтобы делиться ими, предполагая, что все эти проекты имеют общего предка.Вы можете настроить только другой элемент, и он будет объединен с остальными, или, в качестве альтернативы, вы можете назначить ему значение свойства, которое будет определено в месте его использования.Я понимаю, что в общем случае это не подходит для этого варианта использования, поскольку родитель описывает структуру, а не тип проекта.

Другой альтернативой является создание архетипа для такого проекта.Это позволяет вам определить его один раз и создать в новых проектах, но это не то, что используется повторно напрямую.

На данный момент лучшим решением, вероятно, является пользовательский плагин - я думаю, что это послужило вдохновением для Дона Брауна, чтобы написатьплагин mojo-executor, который сейчас находится по адресу: https://github.com/TimMoore/mojo-executor. Но да, тогда вам нужна Java / Groovy:)

2 голосов
/ 09 мая 2011

Как и в случае большинства проблем, с которыми вы столкнетесь в своем путешествии по Maven, ответ будет Ant.

Создайте скрипт сборки Ant, который будет делать именно то, что вы хотите, а затем вызовите его с помощью maven-antrun-plugin .

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

Maven: 0, Ant:1.

КЭД.

1 голос
/ 09 мая 2011

Вы, вероятно, могли бы создать проект только для pom, добавить туда 100 строк и наследовать их в своих проектах через тег .

0 голосов
/ 20 ноября 2012

См. Плагин Maven Tiles . У меня отлично работает.

...