У меня есть профиль в моем pom.xml, который должен быть всегда активен, если он явно не деактивирован (-P! FirstProfile). Я решил это с помощью флага activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Теперь в том же pom.xml у меня есть второй профиль, который должен быть активен, только если профиль действительно активирован (-P secondProfile). Таким образом, поведение по умолчанию: firstProfile активен, secondProfile неактивен. В какой-то момент я хотел бы активировать второй профиль в дополнение к первому. Проблема в том, что если я сделаю это с помощью "-P secondProfile", то, к сожалению, первый профиль будет деактивирован. В документации Maven указано следующее:
... Этот профиль будет автоматически активен для всех сборок, если другой профиль в том же POM не будет активирован одним из ранее описанных методов. Все профили, которые активны по умолчанию, автоматически деактивируются, когда профиль в POM активируется в командной строке или через его конфигурацию активации. ...
Есть ли возможность как-то сохранить всегда активным firstProfile (без необходимости объявлять его в settings.xml)?
Ответы:
Один из приемов - избежать
activeByDefault
и вместо этого активировать профиль по отсутствию свойства, например:После этого вы сможете деактивировать профиль с помощью
-DskipFirstProfile
или с помощью-P !firstProfile
, но в противном случае профиль будет активен.См .: Maven: полное руководство, активация профиля - активация при отсутствии свойства.
источник
firstProfile
отключен, только если вы укажете-DskipFirstProfile
(напримерmvn verify -DskipFirstProfile
).Хотелось бы, чтобы была такая возможность, я часто ее упускал. Единственная актуальная проблема JIRA, которую я смог найти, это следующая:
И это разрешено как
Not A Problem
.Я перестал использовать
activeByDefault
, потому что подход «все или ничего» сделал его бесполезным для меня.Единственный способ изменить это поведение - написать свою собственную замену
DefaultProfileSelector
, зарегистрировать ее как компонент сплетения@Component( role = ProfileSelector.class )
и вставить${MAVEN_HOME}/lib/ext
(таким образом он будет выбран в качестве селектора профиля по умолчанию). (Если вы используете Maven 3.0.2 или более раннюю версию, вам также придется отредактировать${MAVEN_HOME}/bin/m2.conf
загрузкуlib/ext
перед загрузкойlib
)источник
Это древний вопрос, но похоже, что проблему можно решить, используя
activeProfile
вместоactiveByDefault
. Я использую Maven 3.3.9, но решение может работать и в более ранних версиях.Просто перечислите свое
activeProfiles
в своемsettings.xml
, например:У
my-awesome-profile
меня есть настройки, такие как URL-адреса базы данных и т. Д., Поэтому они всегда применяются. Здесь я активирую второй профильresolve-from-central
:Обратите внимание, как
my-awesome-profile
все еще активно. Ура!источник
Вы можете просто перечислить все профили, которые хотите активировать, в командной строке как таковые:
-П профиль-1, профиль-2
maven был разработан для автоматической активации нескольких профилей, однако если вы переопределите это с помощью -P, то будут активированы только профили, перечисленные в параметре.
источник
-P
только деактивирует<activeByDefault>
профили. Профили, активированные<activeProfiles>
вsettings.xml
или любым другим типом,<activation>
остаются активными, если явно не деактивированы.Профили - хороший способ навести порядок в POM. Особенно, если вы используете несколько запусков одного и того же плагина для разных целей.
Использование файлов:
Это всегда будет так (если только кто-то не удалит каталог во время загрузки Maven :). Протестировано с Maven 3.6.0.
Это также может быть хорошим способом различать типы проектов. Например, мой проект всегда
module.json
присутствует.Использование расширения для активации профиля
Есть несколько расширений Maven для активации профиля. Один из них здесь:
https://github.com/OndraZizka/el-profile-activator-extension
источник
<file><exists>.</exists></file>
Вы не можете сохранить профиль по умолчанию активным, но вы можете взять содержимое этого профиля (... в вашем примере) и просто переместить его в основной раздел pom.
Тот факт, что вы используете профили, не означает, что все, что вы делаете, должно находиться в профиле.
источник