Різні залежності для різних профілів побудови


115

Чи можливо мати різний набір залежностей у файлі maven pom.xml для різних профілів?

напр

mvn -P debug
mvn -P release

Я хотів би зібрати інший файл jar залежності в одному профілі, який має однакові назви класів та різні реалізації одних і тих же інтерфейсів.


Це можна використовувати при націлюванні на різні веб-сервери. Наприклад, під час створення для сервера JavaEE 5, який пропонує вкладиші, такі як JAXB, які ви не повинні включати у свій файл війни, порівняно з побудовою для сервера JavaEE 1.4, куди слід включити банку JAXB.
Леонель

Відповіді:


174

Щоб процитувати документацію Maven про це :

Елемент профілю містить як необов'язкове активацію (тригер профілю), так і набір змін, які слід внести до POM, якщо цей профіль був активований. Наприклад, проект, побудований для тестового середовища, може вказувати на іншу базу даних, ніж у кінцевого розгортання. Або залежність може бути виведена з різних сховищ на основі використовуваної версії JDK .

(Наголос мій)

Просто поставте залежність для releaseпрофілю всередині самого декларації профілю і зробіть те саме для debug.

<профілі>
    <профіль>
        <id> налагодження </id>
        …
        <залежність>
            <залежність>… </dependency>
        </dependitions>
        …
    </profile>
    <профіль>
        <id> випуск </id>
        …
        <залежність>
            <залежність>… </dependency>
        </dependitions>
        …
    </profile>
</profiles>

2
Цей метод призведе до невирішення коду в режимі редагування. Якщо налагодження активне, банку випуску залежності буде відсутня, і код буде помилкою. Як це вирішити?
Брюссен

6
ви можете встановити область залежності від випуску як "надану" в ієрархії залежностей і скинути область "компілювати" в розділі профілю випуску. Так що залежність доступна для компіляції, але не в остаточній війні для профілю «налагодження».
Удай

@uday Якщо ви дасте відповідь, що показує такий підхід, я хотів би схвалити його
javadba

Профілі IMHO марні, як мінімум, для залежностей: IDE помиляються, залежності перестають вирішуватися, додатки не працюють. Я очікував більше.
Арес

6

Ваш groupId, artifactId повинен бути включений у ваші профілі як властивості, і ви можете перемістити свої залежності до загального розділу.


2
Це буде лише у випадку, якщо у вас є 1 залежність. Якщо кількість залежностей між налагодженням та випуском відрізняється, токенізація не працюватиме. З цього приводу я б рекомендував не токенізувати та чітко визначати відвали в розділі профілю.
Марсель Овердійк

Інша відповідь для мене не спрацювала, оскільки залежності від профілю за замовчуванням все ще були включені разом з іншими конкретними залежностями профілю. Ваша відповідь спрацювала чудово.
Влад Міхалча

@Vlad Ви видалили залежність з основного корпусу POM? Інакше ви матимете його двічі. (Дивіться stackoverflow.com/q/24855678/6944068 про те, як переконатися, що один профіль завжди активний.)
toolforger
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.