2012-02-29 2 views
4

Maven 플러그인 테스트 하네스 (2.0-alpha1)를 사용하는 데 문제가 있습니다. Mojo를 테스트하려면 매개 변수의 기본값 및 표현식을 적용 할 수 없습니다 .Maven 플러그인을 사용하여 Mojos의 기본값 및 테스트 표현 테스트 하네스 :

/** 
* <p>The output file to write the settings to.</p> 
* 
* @parameter default-value="${project.build.directory}/myProperties.properties" expression="${properties.file}" 
*/ 

private String file; 

내 단위 테스트를 실행하면이 속성은 항상 null입니다 : 나는 다음과 같은 매개 변수가 있습니다. ${project.build.directory}을 성공적으로 반환하는 MavenProjectStub를 삽입하려고했지만 내 Mojo 매개 변수에는 적용되지 않습니다.

시험 중에 내 모지 내에서 ${project.build.directory}과 같은 기본 값과 표현식을 사용할 수있는 방법이 있습니까?

답변

2

나는이 똑같은 문제가 있었고 어떤 해결책도 찾을 수 없었으므로 직접 고치기로 결정했다. 필자는 최신 버전의 maven-plugin-testing-harness (현재 2.0-alpha-1)의 소스 코드를 확인하고 그것을 내 자신의 github 저장소에 저장했습니다.

코드를 체크 아웃하고 로컬로 빌드해야합니다.

프로젝트에서 변경해야하는 것은 POM의 종속성을 바꾸는 것뿐입니다. 나 자신의 도메인/groupId 이름을 아파치 하나 대신에 사용하여 미래의 아파치 릴리스와의 충돌 (그리고 혼동)을 피한다.

이것은 당신이 당신의 POM에 넣어해야 할 것입니다 :

<dependency> 
    <groupId>com.menttis.maven.plugin-testing</groupId> 
    <artifactId>maven-plugin-testing-harness</artifactId> 
    <version>2.0.1</version> 
    <scope>test</scope> 
</dependency> 

을 그리고 이것은 당신의 코드 잡을 수있는 저장소입니다 : 그래서 they added lookupConfiguredMojo for just this use case처럼 보이는 https://github.com/grighetto/maven-plugin-testing-harness

+0

Gianluca, 나는 같은 상황을 겪고 있기 때문에 MavenProjectStub의 표현식을 지원하기 위해 변경 한 사항에 대해 자세히 알고 싶습니다. 차라리 전체 프로젝트를 잡고 그것에 의존하기 시작하기 전에 수정 코드가 무엇인지 이해하고 싶습니다. 변경해야 할 사항을 정교하게 신경 써야합니까? 수업 중 일부를 살펴 보았지만 변경 사항이 어디에 있는지 알 수 없었습니다. –

+0

@Meghan, GitHub에서 특정 커밋을 살펴볼 수 있습니다 : https : // github.COM/grighetto/받는다는 - 플러그인 - 테스트 - 하네스/당신은 지금이 알아 낸 수도 있지만, 관련 변경 사항이 AbstractMojoTestCase 클래스 (311 (295)에서 라인을 확인)에 적용된 /c711fb0c8e9b03fe886a5db5b888478f1b4dc70a을 커밋합니다. 이 수정 이전의 문제는 플러그인이 Mojo에서 매개 변수를 추출하지 않아서 PluginParameterExpressionEvaluator로 전달되어야한다는 것이 었습니다. 이것이 약간 명확 해지기를 바랍니다. –

7

합니다. 전화를하는 방법을 알아내는 데는 어느 정도 시간이 걸렸습니다. 제대로 사용하려면 MavenProject을 사용해야합니다. 여기에 나를 위해 일한 무엇 : 내 플러그인을 테스트 할 때이 등 문제의 무리를 공격

File pomFile = ... 

MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest(); 
ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest(); 
ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class); 
MavenProject project = projectBuilder.build(pomFile, buildingRequest).getProject(); 

MyMojo mojo = (MyMojo) this.lookupConfiguredMojo(project, "my-goal"); 
... 
+0

이것은 maven 버전 관리 문제 일 수 있습니다. (maven 3.1.1에서 작업 중입니다.)이 코드를 실행할 때'IllegalArgumentException : 잘못된 저장소 시스템 세션 : 세션이 null이 아닐 수 있습니다. ' 이 기능을 사용하기 위해 설정해야하는 다른 구성이 있습니까? – amaidment

+0

죄송합니다. 지금까지이 의견을 본 적이 없지만 코드는 여기에 있습니다. https://code.google.com/p/cleartk/source/browse/jcasgen-maven-plugin/src/test/java/org /cleartk/plugin/JCasGenMojoTest.java?r=183f61f1decb199fec571c2eb49de7abd4053f4a – Steve

3

. 각 문제는 수정하기 위해 몇 줄 밖에 걸리지 않았지만 찾기가 쉽지 않았습니다. 여기에있는 포인터가 도움이되었습니다!

나는 이것을 BetterAbstractMojoTestCase.java 클래스로 결합했습니다. 그것은 내가 부딪친 반쯤 졸린 쟁점을 해결 한 마법 선을 포함하고 있습니다. 문제에 대해 lookupConfiguredMojo(File pom, String goal) 방법을 제공합니다. 버전 3+를 들어

+0

단위 테스트를 위해 Steve의 코드를 사용하지만'executionRequest.getProjectBuildingRequest()'를'newMavenSession(). getProjectBuildingRequest()'를 통해 코드 호출로 대체하면 나에게 이걸 넘겨 줬어. 로드 블록. 공유해 주셔서 감사합니다. – Adam

+0

실제로 좀 더 단계가 있고 Plexus 컨테이너에 테스트가 생성되지 않은'MavenProject'가 필요하다는 것을 알았습니다. 그래서 Steve의 스 니펫에서 인스턴스화 된 프로젝트를 사용하여 수동으로 Mojo로 설정해야했습니다. – Adam

0

는 :

<dependency> 
     <groupId>org.apache.maven.plugin-tools</groupId> 
     <artifactId>maven-plugin-annotations</artifactId> 
     <version>3.5</version> 
     <scope>provided</scope> 
    </dependency> 

내가 javadoc의 구문 주석 구문을 혼합 한 실현하기 전에 자신 이것에 대해 잠시 혼란을 보냈다.

@Parameter(property = "project.build.directory") 
private String projectBuildDir; 

그런 다음 파일 이름을 해당 값과 연결하여 코드의 경로를 완성하십시오.

관련 문제