2010-01-27 6 views

Antwort

3

Sehen Sie, wie org.apache.maven.plugin.testing.AbstractMojoTestCase von Maven-Plugin-Testing-Kabelbaum implementiert ist. Hier ist ein Codeausschnitt aus einigen meiner Tests, der hilfreich sein kann.

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

Hier ist eine bessere Lösung: Verwenden Sie die Mojo-Executor Bibliothek. Es stellt eine einfache Java-API zum Aufrufen von Maven-Plugins zur Verfügung.

+0

diese ersetzt nur die Notwendigkeit, ein Maven Plugin mit der Notwendigkeit zur Ausführung einer anderen Maven Plugin auszuführen. –

+0

@JensSchauder: Nein, tut es nicht. Mojo-Executor bietet eine einfache Java-API, die in Ihrem Namen Maven-Plugins aufruft. Maven Plugins direkt aufrufen erfordert viel schweres Heben! – Gili

+0

Ok, das war nicht klar von der Projektseite für mich. –

13

Verwenden Sie die Maven Invoker API. Es ist schnell und einfach.

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

Das ist ein neuer Lebenszyklus. TFQ versucht, ein Mojo innerhalb des aktuellen Lebenszyklus aufzurufen. –