2010-01-27 10 views

Odpowiedz

3

Zobacz, jak zaimplementowano org.apache.maven.plugin.testing.AbstractMojoTestCase z pakietu testowego. Oto fragment kodu z niektórych moich testów, które mogą być pomocne.

public abstract class JAXBGenerateTest extends AbstractMojoTestCase { 

    static { 
     System.setProperty("basedir", getBaseDir().getAbsolutePath()); 
    } 

    protected MavenProjectBuilder mavenProjectBuilder; 

    protected void setUp() throws Exception { 
     super.setUp(); 

     mavenProjectBuilder = (MavenProjectBuilder) getContainer().lookup(
       MavenProjectBuilder.ROLE); 
    } 

    protected static File getBaseDir() {...} 

    /** 
    * Validate the generation of a java files from purchaseorder.xsd. 
    * 
    * @throws MojoExecutionException 
    */ 
    public void testExecute() throws Exception { 

     final File pom = new File(getBaseDir(), 
     "src/test/resources/test-pom.xml"); 

     final ArtifactRepository localRepository = new DefaultArtifactRepository("local", 

       new File(getBaseDir(), "target/test-repository").toURI().toURL().toString()    , new DefaultRepositoryLayout()); 


     final MavenProject mavenProject = mavenProjectBuilder.build(pom, localRepository, null); 


     final XJC2Mojo generator = (XJC2Mojo) lookupMojo("generate", pom); 
     generator.setProject(mavenProject); 
     generator.setLocalRepository(localRepository); 
     generator.setSchemaDirectory(new File(getBaseDir(),"src/test/resources/")); 
     generator.setSchemaIncludes(new String[] { "*.xsd" }); 
     generator.setBindingIncludes(new String[] { "*.xjb" }); 
     generator.setGenerateDirectory(new File(getBaseDir(), "target/test/generated-sources")); 
     generator.setVerbose(true); 
     generator.setGeneratePackage("unittest"); 
     generator.setRemoveOldOutput(false); 

     generator.execute(); 
    } 

} 
7

Oto lepsze rozwiązanie: użyć biblioteki Mojo-Executor. Ujawnia prosty API Java do wywoływania wtyczek Mavena.

+0

to po prostu zastępuje potrzebę na wykonanie Maven Plugin z koniecznością wykonania kolejnego Maven Plugin. –

+0

@JensSchauder: Nie, nie ma. Mojo-Executor zapewnia prosty interfejs API języka Java, który wywołuje wtyczki Maven w twoim imieniu. Wywoływanie pluginów Maven bezpośrednio wymaga dużego podnoszenia ciężarów! – Gili

+0

OK, nie było to jasne ze strony projektu dla mnie. –

13

Użyj Maven Invoker API. Jest szybki i łatwy.

InvocationRequest request = new DefaultInvocationRequest(); 
request.setPomFile(new File("/path/to/pom.xml")); 
request.setGoals(Collections.singletonList("install")); 

Invoker invoker = new DefaultInvoker(); 
invoker.setMavenHome(new File("/usr")); 

try 
{ 
    invoker.execute(request); 
} 
catch (MavenInvocationException e) 
{ 
    e.printStackTrace(); 
} 

pom.xml:

<dependency> 
    <groupId>org.apache.maven.shared</groupId> 
    <artifactId>maven-invoker</artifactId> 
    <version>2.1.1</version> 
</dependency> 
+0

To rozwidla nowy cykl życia. TFQ próbuje wywołać mojo w bieżącym cyklu życia. –

Powiązane problemy