내 pom.xml에 명시 적으로 비활성화되지 않는 한 항상 활성화되어야하는 프로필이 있습니다 (-P! firstProfile). activeByDefault 플래그를 사용하여이 문제를 해결했습니다.
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
이제 동일한 pom.xml에 두 번째 프로필이 정의되어 있습니다. 프로필이 실제로 활성화 된 경우에만 활성화되어야합니다 (-P secondProfile). 따라서 기본 동작은 firstProfile active, secondProfile inactive입니다. 다른 지점에서 첫 번째 프로필 외에도 두 번째 프로필을 활성화하고 싶습니다. 이제 문제는 “-P secondProfile”을 사용하여 수행하면 불행히도 firstProfile이 비활성화된다는 것입니다. Maven 문서는 다음과 같이 설명합니다.
… 이전에 설명한 방법 중 하나를 사용하여 동일한 POM의 다른 프로필을 활성화하지 않는 한이 프로필은 모든 빌드에 대해 자동으로 활성화됩니다. 기본적으로 활성화 된 모든 프로필은 POM의 프로필이 명령 줄에서 활성화되거나 활성화 구성을 통해 활성화 될 때 자동으로 비활성화됩니다. …
어떻게 든 firstProfile을 항상 활성 상태로 유지하는 방법이 있습니까 (settings.xml에서 선언 할 필요없이)?
답변
한 가지 트릭은를 피하고 activeByDefault
대신 속성이없는 경우 프로필을 활성화하는 것입니다. 예 :
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<property>
<name>!skipFirstProfile</name>
</property>
</activation>
...
</profile>
</profiles>
그런 다음 -DskipFirstProfile
또는로 프로필을 비활성화 할 수 있어야합니다. -P !firstProfile
그렇지 않으면 프로필이 활성화됩니다.
참조 : Maven : The Complete Reference, Profile Activation-Activation by the Absence of a Property
답변
나는 그런 가능성이 있었으면 좋겠다. 나는 종종 그것을 놓쳤다. 내가 찾을 수있는 유일한 관련 JIRA 문제는 다음과 같습니다.
그리고 그것은 Not A Problem
.
activeByDefault
이 “전부 또는 전무”접근 방식이 나에게 쓸모 없게 만들었 기 때문에 사용을 중단 했습니다.
이 동작을 변경하는 유일한 방법은에 대한 대체를 작성 DefaultProfileSelector
하고을 사용하여 plexus 구성 요소로 등록한 다음 @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
과 같이 에서 간단히 나열하십시오 .
<settings>
<profiles>
[...]
</profiles>
<activeProfiles>
<activeProfile>my-awesome-profile</activeProfile>
</activeProfiles>
</settings>
에는 my-awesome-profile
데이터베이스 URL 등과 같은 설정이 있으므로 항상 적용됩니다. 여기에서 두 번째 프로필을 활성화합니다 resolve-from-central
.
$ mvn help:all-profiles -P resolve-from-central
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:all-profiles (default-cli) @ standalone-pom ---
[INFO] Listing Profiles for Project: org.apache.maven:standalone-pom:pom:1
Profile Id: resolve-from-central (Active: true , Source: settings.xml)
Profile Id: my-awesome-profile (Active: true , Source: settings.xml)
Profile Id: resolve-from-internal (Active: false , Source: settings.xml)
공지 사항에서는 my-awesome-profile
여전히 활성 상태입니다. 예이!
답변
다음과 같이 명령 줄에서 활성화하려는 모든 프로필을 간단히 나열 할 수 있습니다.
-P 프로필 -1, 프로필 -2
maven은 다중 프로필 활성화를 자동으로 허용하도록 설계되었지만 -P로 재정의하면 매개 변수에 나열된 프로필 만 활성화됩니다.
답변
프로필은 POM에 순서를 가져 오는 좋은 방법입니다. 특히 다른 목적으로 동일한 플러그인을 여러 번 실행하는 경우.
파일 사용 :
<profile>
<id>alwaysActive</id>
<activation>
<file><exists>.</exists></file>
</activation>
...
</profile>
이것은 항상 사실입니다 (Maven 부팅 중에 누군가가 디렉토리를 삭제하지 않는 한). Maven 3.6.0으로 테스트되었습니다.
프로젝트 유형을 구별하는 좋은 방법 일 수도 있습니다. 예를 들어, 내 프로젝트는 항상 module.json
존재합니다.
프로필 활성화 확장 사용
프로필 활성화를위한 몇 가지 Maven 확장이 있습니다. 그중 하나는 여기 포크에 있습니다 :
https://github.com/OndraZizka/el-profile-activator-extension
답변
기본 프로필을 활성 상태로 유지할 수는 없지만 해당 프로필의 내용 (예 : …)을 가져 와서 pom의 기본 섹션으로 이동할 수 있습니다.
프로필을 사용하고 있다고해서 수행하는 모든 작업이 프로필 내에 있어야한다는 의미는 아닙니다.