[maven-2] 다른 프로필이 활성화 된 경우에도 activeByDefault 인 Maven 프로필을 활성 상태로 유지하는 방법은 무엇입니까?

내 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 문제는 다음과 같습니다.

MNG-4917 : activeByDefault가 true로 설정되어 있어도 프로필이 활성화되지 않음

그리고 그것은 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의 기본 섹션으로 이동할 수 있습니다.

프로필을 사용하고 있다고해서 수행하는 모든 작업이 프로필 내에 있어야한다는 의미는 아닙니다.


답변