2014-12-25 3 views
5

첫 번째 Maven 플러그인을 만들고 싶습니다. 내 모기 스에서 MavenSession에 액세스해야합니다. 나는 많은 장소에서 다음 스 니펫으로 충분해야한다는 것을 알았지 만, Maven 로그 (POM.xml 내 플러그인 사용)에서 메이븐 세션이 통과 된 것처럼 보이지만 항상 mavenSession 객체가 null로 끝납니다. 적어도 채워졌지만 - MavenSession 객체에 삽입되지 않았습니다.MavenSession이 채워지지 않았습니다.

누구나 내가 누락 된 부분을 알려주시겠습니까?

감사합니다.

: 로그에서

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.2.5</version> 
</dependency> 

그리고이 :


/** 
* The Maven Session 
* 
* @required 
* @readonly 
* @parameter 
* expression="${session}" 
*/ 
private MavenSession mavenSession; 
나는 또한 (A 어디 선가 발견 코멘트 기준) 플러그인의 pom.xml 파일에 다음을 추가
[DEBUG] Configuring mojo 'com.ofernicus.helpers:resource-helper:1.0-SNAPSHOT:iterate' with basic configurator --> 
[DEBUG] (f) session = [email protected] 
[DEBUG] (f) mavenProject = MavenProject: com.ofernicus.consumers:resource-helper-consumer:1.0-SNAPSHOT @ C:\Users\oferlan\workspaces\Maven\PluginConsumer\resource-helper-consumer\pom.xml 
+0

(단위 테스트) 시간 또는 런타임에 대해 이야기하고 있습니까? –

+0

@RobertScholte - 런타임이라고 부르는 것 같아요. -이 플러그인을 다른/별개의 Maven 프로젝트에서 호출하려고합니다. –

+0

'null'은 어디입니까? 'execute' 메소드의 시작시에? – mystarrocks

답변

2

덕분에, 나는 결국 문제를 발견했다. 일단 주입되면,이 멤버들은 모조의 범위 내에서 어디에서나 접근 가능하고 사람들이 거주하고 있다고 생각합니다. 코드를 execute() 메서드 자체로 옮겼고 문제가 해결되었습니다.

감사합니다.

1

누락 된 매개 변수 주석 :

@Parameter(defaultValue = "${session}") 
private MavenSession session; 
+1

감사합니다, Hersh - 귀하의 제안을 시도했지만 여전히 (MavenSession) 세션을 null로 가져옵니다. –

+1

@Hersh, 아니요, OP는 매개 변수 주석을 놓치지 않았습니다. [javadoc 태그] (http://maven.apache.org/plugin-tools/maven-plugin-tools-java/index.)를 사용했습니다. html) 대신 권장되는 것은 아니지만 여전히 작동합니다. – mystarrocks

0

Maven은 plexus을 사용하여 메이븐 프로젝트/pom.xml의 구성 요소/요소를 플러그인 프로젝트에 삽입하므로 관련 종속성을 포함시켜야합니다.

pom.xml에 포함시켜 프로젝트에 필요한 종속성을 모두 가져올 수있는 전체 종속성 목록을 제공합니다.

그리고 mojo annotations에서 mojo javadoc tags을 선호합니다. this을 읽는 것과 관련된 플러그인 도구의 전체 그림을 볼 수 있습니다. 당신은 두 개의 필드에 대한 참조를 가지고있는 것처럼

<properties> 
    <pluginTools.version>3.3</pluginTools.version> <!-- be sure to use the latest version in here --> 
</properties> 

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-tools-api</artifactId> 
    <version>${pluginTools.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>${pluginTools.version}</version> 
    <scope>provided</scope> 
</dependency> 
+2

Maven 3.0에서 guice를 사용했기 때문에'Maven uses pluxus'라는 표현은 더 이상 사실이 아닙니다. 하지만 이전 플러그인을 지원하는 호환성 레이어 (sisu)가 있습니다 (https://jira.codehaus.org/browse/MNG-4749 참조). – khmarbaise

1

그것은 같습니다 코드에서는이 분야 mavenSession 부르지 만, 메이븐의 출력을 볼 때 그것은 session을 의미합니다. 을 제대로 주사하지 않은 것 같습니다. 나는 실행() 메소드에서 호출 했던 방법에서 mavenSession 및 mavenProject에 액세스를 시도했다

: 여기에 응답에

+0

실제로는 Session과 mavenSession을 모두 정의해야했습니다. 일단 @Parameter와 JavaDoc 태그를 통해 주입하면 - 둘 다 null이었습니다. 어쨌든 - 문제는 지금 해결되었습니다 (제가 직접 답변했습니다). –

관련 문제