다른 프로필이 활성화 된 경우에도 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 문제는 다음과 같습니다.
그리고 그것은 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.
'code' 카테고리의 다른 글
ko.applyBindings를 호출 할 때“Cannot read property 'nodeType'of null”발생 (0) | 2020.08.20 |
---|---|
배열의 모든 요소를 Java의 특정 값으로 초기화하는 방법 (0) | 2020.08.20 |
SQL Server에서 group_concat을 사용하여 쿼리를 만드는 방법 (0) | 2020.08.19 |
더 나은 점 : @SuppressLint 또는 @TargetApi? (0) | 2020.08.19 |
메서드 선언은 PHP의 부모 메서드와 호환되어야합니다. (0) | 2020.08.19 |