2015-05-08 2 views
1

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

Класс, который выполняет генерацию, имеет несколько зависимостей. Сгенерированные классы не имеют зависимостей.

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

Я заглянул в плагин maven shade. Я компилирую один раз, запускаю класс генератора с плагином mojo's exec, компилируем последний раз. Тогда оттенок, конечно, проходит в фазе упаковки. Он создает dependency-reduced-pom.xml без чрезмерных зависимостей. Поэтому запустите mvn clean package и посмотрите target/foo.jar. Я ожидаю, что банка в папке meta-inf станет уменьшенной баной зависимости. Но это полный пом. Я не знаю, как сгенерированный pom заменит тот, который упакован.

Еще одно плохое решение, которое я пробовал, - это использование нескольких профилей с их собственной зависимостью. Я запускаю maven один раз с генерирующим профилем, а затем снова с профилем упаковки. Это работает, но отстой, потому что вам нужно запустить несколько команд maven. Это не дружелюбно.

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

+0

Как вы звоните в генератор? Из теста? exec: java в течение одной фазы? Является ли ваш класс генератора частью проекта? Класс вашего генератора зависит (время компиляции) от классов вашего проекта? –

ответ

1

1) Одна из возможностей - сделать все ваши зависимости <optional>true</optional>.

У pom все еще есть зависимости, но проекты, использующие вашу библиотеку, не будут пытаться их загрузить.

2) Используйте plugin dependencies с плагином exec.

Это хорошо работает, если класс генератора определен в другом проекте.

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

3) Если вы используете maven-shade-plugin, то обычно используется dependency-reduced-pom.xml. Проверьте свой репозиторий .m2, чтобы увидеть содержимое копи, которое копируется там, когда вы делаете mvn install. Вероятно, его содержимое будет соответствовать dependency-reduced-pom.xml

+0

У меня было неправильное представление о том, откуда появился установленный пом. Я думал, что тот, который был упакован в банку, использовался. Скорее, при использовании тени это действительно 'dependency-reduced-pom.xml'. – djeikyb

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