2010-01-27 10 views

risposta

3

Vedere come viene implementato org.apache.maven.plugin.testing.AbstractMojoTestCase da maven-plugin-testing-harness. Ecco uno snippet di codice di alcuni dei miei test che potrebbe essere utile.

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

Ecco una soluzione migliore: utilizzare la libreria Mojo-Executor. Espone una semplice API Java per richiamare i plugin Maven.

+0

questo solo elimina la necessità di eseguire un plugin Maven con la necessità di eseguire un altro Maven Plugin. –

+0

@JensSchauder: No, non è così. Mojo-Executor fornisce una semplice API Java che richiama i plugin Maven per tuo conto. Richiamare i plug-in Maven richiede molto lavoro pesante! – Gili

+0

Ok, non era chiaro dalla pagina del progetto per me. –

13

Utilizzare Maven Invoker API. È veloce e facile.

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

Questo sta creando un nuovo ciclo di vita. TFQ sta tentando di richiamare un mojo all'interno del ciclo di vita corrente. –

Problemi correlati