Возможно ли иметь другой набор зависимостей в файле maven pom.xml для разных профилей?
например
mvn -P debug
mvn -P release
Я хотел бы выбрать другой jar-файл зависимостей в одном профиле, который имеет те же имена классов и разные реализации одних и тех же интерфейсов.




Процитируем Документация Maven по этому поводу:
A profile element contains both an optional activation (a profile trigger) and the set of changes to be made to the POM if that profile has been activated. For example, a project built for a test environment may point to a different database than that of the final deployment. Or dependencies may be pulled from different repositories based upon the JDK version used.
(Акцент мой)
Просто поместите зависимость для профиля release внутри самого объявления профиля и сделайте то же самое для debug.
<profiles>
<profile>
<id>debug</id>
…
<dependencies>
<dependency>…</dependency>
</dependencies>
…
</profile>
<profile>
<id>release</id>
…
<dependencies>
<dependency>…</dependency>
</dependencies>
…
</profile>
</profiles>
Этот метод приведет к тому, что код не будет исправлен в режиме редактирования. Если отладка активна, jar зависимостей выпуска будет отсутствовать, и код будет ошибочным. Как это решить?
вы можете установить область зависимости для конкретного выпуска как «предоставленную» в иерархии зависимостей и сбросить область до «компиляции» в разделе профиля выпуска. Так что зависимость доступна для компиляции, но не в финальной войне за «отладочный» профиль.
@uday Если бы вы поставили ответ, показывающий этот подход, я бы с удовольствием проголосовал за него
Профили IMHO бесполезны, по крайней мере, для зависимостей: IDE выдают ошибки, зависимости перестают разрешаться, приложения в итоге не работают. Я ожидал большего.
Ваш groupId, artifactId должен быть токенизирован в ваших профилях как свойства, и вы можете переместить свои зависимости в общий раздел.
Это будет только в том случае, если у вас есть 1 зависимость. Если количество зависимостей различается между отладкой и выпуском, просто токенизация не сработает. В этом отношении я бы рекомендовал не токенизировать и явно определять deps в разделе профиля.
Другой ответ не сработал для меня, поскольку зависимости профиля по умолчанию все еще были включены вместе с другими конкретными зависимостями профиля. Ваш ответ сработал нормально.
@Vlad Вы удалили зависимость от основного тела POM? В противном случае вы получите его дважды. (См. stackoverflow.com/q/24855678/6944068 о том, как убедиться, что один профиль всегда активен.)
Это можно использовать при нацеливании на разные веб-серверы. Например, при сборке для сервера JavaEE 5, который предлагает такие библиотеки, как JAXB, которые вы не должны включать в свой файл war, по сравнению со сборкой для сервера JavaEE 1.4, куда вы должны включить jar-файл JAXB.