code

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

codestyles 2020. 8. 19. 08:10
반응형

다른 프로필이 활성화 된 경우에도 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로 재정의하면 매개 변수에 나열된 프로필 만 활성화됩니다.


Profiles are a good way to bring some order into POM. Especially if you use multiple executions of the same plugin for different purposes.

Using files:

<profile>
    <id>alwaysActive</id>
    <activation>
         <file><present>.</present></file>
    </activation>
    ...
</profile>

This will always be true (unless someone deletes the directory during Maven boot :). Tested with Maven 3.6.0.

It might also be a good way to differentiate between types of projects. For instance, my project has always module.json present.

Using a profile activating extension

There are a few Maven extensions for profile activation. One of them in a fork here:
https://github.com/OndraZizka/el-profile-activator-extension


You can't keep the default profile active, but you can take the contents of that profile (the ... in your example) and just move it to the main section of the pom.

Just because you are using profiles, it does not mean everything you are doing needs to be within a profile.

참고URL : https://stackoverflow.com/questions/5309379/how-to-keep-maven-profiles-which-are-activebydefault-active-even-if-another-prof

반응형