커스텀 maven2 MOJO를 작성 중입니다. 이 MOJO에서 다른 플러그인의 런타임 구성에 액세스해야합니다.사용자 정의 mojo에서 Maven 플러그인의 런타임 구성에 액세스하는 가장 좋은 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까?
커스텀 maven2 MOJO를 작성 중입니다. 이 MOJO에서 다른 플러그인의 런타임 구성에 액세스해야합니다.사용자 정의 mojo에서 Maven 플러그인의 런타임 구성에 액세스하는 가장 좋은 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까?
정확히 어떻게할지는 모르겠지만 이것이 최고의 디자인 결정이 아닐 수도 있습니다. 모든 가능한 경우 모조와 다른 플러그인을 분리해야합니다.
대신 사용자 지정 속성을 사용하여 별도의 플러그인 구성에서 중복을 제외하는 것이 좋습니다.
당신은 속성 섹션 사용하여 치어의 사용자 지정 속성 "foo는"을 설정할 수 있습니다
<project>
...
<properties>
<foo>value</foo>
</properties>
...
</project>
속성 푸 달러 기호 + 중괄호 표기법을 사용하여 치어의 아무 곳이나 지금 접근을 :
<somePluginProperty>${foo}</somePluginProperty>
속성을 사용하는 것은 확실히 한 가지 방법이지만 이상적은 아닙니다. 여전히 사용자가 $ {propertyName}을 pom 전체의 여러 위치에 정의해야합니다. 내 플러그인이 플러그인 정의 자체가 아닌 사용자의 pom에 수정을 가하지 않고 작동하도록하고 싶습니다.
너무 엄격한 결합으로 다른 MOJO의 런타임 속성에 액세스하는 것을 볼 수 없습니다. 다른 MOJO가 빌드 계층 구조의 어디에서나 정의되는 경우 MOJO가 동일한 구성을 존중하기를 바랍니다.
나의 현재 솔루션입니다 : 이것은 몇 가지 작은을 위해 일했다
private Plugin lookupPlugin(String key) {
List plugins = getProject().getBuildPlugins();
for (Iterator iterator = plugins.iterator(); iterator.hasNext();) {
Plugin plugin = (Plugin) iterator.next();
if(key.equalsIgnoreCase(plugin.getKey())) {
return plugin;
}
}
return null;
}
/**
* Extracts nested values from the given config object into a List.
*
* @param childname the name of the first subelement that contains the list
* @param config the actual config object
*/
private List extractNestedStrings(String childname, Xpp3Dom config) {
final Xpp3Dom subelement = config.getChild(childname);
if (subelement != null) {
List result = new LinkedList();
final Xpp3Dom[] children = subelement.getChildren();
for (int i = 0; i < children.length; i++) {
final Xpp3Dom child = children[i];
result.add(child.getValue());
}
getLog().info("Extracted strings: " + result);
return result;
}
return null;
}
내가 테스트 한 빌드. 다중 모듈 빌드 포함.
다음과 같은 단계를 사용하여 현재 빌드에 사용 된 플러그인 목록 얻을 수 있습니다 :
먼저 당신이 메이븐이 당신의 모조에 현재 프로젝트를 주입 얻을 필요가, 당신이 얻을 아래 정의 된 클래스 변수를 사용을 이.
/**
* The maven project.
*
* @parameter expression="${project}"
* @readonly
*/
private MavenProject project;
그런 다음이 빌드에서 사용되는 플러그인 목록을 얻으려면 다음을 사용할 수 있습니다.
mavenProject.getBuildPlugins()
구성을 추출 할 플러그인을 찾을 때까지이 목록을 반복 할 수 있습니다.
마지막으로 구성을 Xpp3Dom으로 가져올 수 있습니다.
plugin.getConfiguration()
참고 :이 (단지 추출하는 정보가 아닌) 다른 플러그인 구성을 변경하는 경우에만 다음 단계로 현재 단계에와 있지 변경 유지됩니다.
위의 내 솔루션과 어떻게 다른가요? 또한 getBuildPlugins는 pom.xml의 섹션 또는 모든 플러그인에서 정의 된 플러그인 만 반환합니다 (프로파일 등에서 정의 된 플러그인도 포함)? –
npellow
getBuildPlugins()를 사용하면 pom의 섹션에있는 플러그인 만 반환됩니다.xml 및 플러그인은 활성 프로필의 섹션에 정의되어 있습니다. –
Kingamajick
@Kingamajick 변경된 변경 사항을 어떻게 든 플러시해야합니까? 플러그인 의존성을 변경했습니다 (이 플러그인 실행 중). 예상 결과를 볼 수 없습니다. –