Различные зависимости для разных профилей сборки

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

например

mvn -P debug
mvn -P release

Я хотел бы выбрать другой jar-файл зависимостей в одном профиле, который имеет те же имена классов и разные реализации одних и тех же интерфейсов.

Это можно использовать при нацеливании на разные веб-серверы. Например, при сборке для сервера JavaEE 5, который предлагает такие библиотеки, как JAXB, которые вы не должны включать в свой файл war, по сравнению со сборкой для сервера JavaEE 1.4, куда вы должны включить jar-файл JAXB.

Leonel 16.10.2009 18:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
119
1
85 899
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Процитируем Документация 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 зависимостей выпуска будет отсутствовать, и код будет ошибочным. Как это решить?

brucenan 02.12.2016 10:28

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

uday 21.02.2017 01:50

@uday Если бы вы поставили ответ, показывающий этот подход, я бы с удовольствием проголосовал за него

StephenBoesch 11.01.2018 22:28

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

Ares 14.02.2019 22:26

Ваш groupId, artifactId должен быть токенизирован в ваших профилях как свойства, и вы можете переместить свои зависимости в общий раздел.

Это будет только в том случае, если у вас есть 1 зависимость. Если количество зависимостей различается между отладкой и выпуском, просто токенизация не сработает. В этом отношении я бы рекомендовал не токенизировать и явно определять deps в разделе профиля.

Marcel Overdijk 09.04.2013 11:20

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

Vlad Mihalcea 02.12.2014 12:46

@Vlad Вы удалили зависимость от основного тела POM? В противном случае вы получите его дважды. (См. stackoverflow.com/q/24855678/6944068 о том, как убедиться, что один профиль всегда активен.)

toolforger 21.06.2018 13:24

Другие вопросы по теме