Estoy usando Maven en el contexto de otra herramienta de construcción (leiningen para Clojure, pero esto no debería importar), y me gustaría saber cómo llamaría a un complemento como dependency:build-classpath programáticamente (es decir, a través de Maven-API, no a través del comando mvn
).Cómo programar una tarea Maven
Respuesta
Vea cómo se implementa org.apache.maven.plugin.testing.AbstractMojoTestCase de maven-plugin-testing-arnés. Aquí hay un fragmento de código de algunas de mis pruebas que puede ser útil.
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();
}
}
El Ant Maven tasks puede darle una idea de cómo hacerlo (DependenciesTask source). Otra ruta puede ser PomModuleDescriptorParser utilizada por Ivy.
Aquí es una solución mejor: utilizar la biblioteca Mojo-Executor. Expone una API Java simple para invocar plugins Maven.
Utilice Maven Invoker API. Es rápido y fácil.
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>
Eso está bifurcando un nuevo ciclo de vida. TFQ está intentando invocar un mojo dentro del ciclo de vida actual. –
- 1. Cómo programar una tarea mediante programación
- 2. ¿Cómo programar una tarea periódica en Java?
- 3. Cómo programar una tarea en segundo plano
- 4. Programar tarea en android
- 5. ¿Cómo programar (y restablecer) una tarea mediante programación con SpringFramwork?
- 6. Cómo programar una tarea para su futura ejecución en la Tarea Biblioteca paralela
- 7. Ejecutando una tarea post maven install
- 8. Cómo programar la tarea para el inicio de cada hora
- 9. ¿Cómo programar una consulta MySQL?
- 10. Cómo programar una tarea para que se ejecute al cerrar ventanas
- 11. Cómo programar una tarea en la función de trabajador azul de Windows
- 12. ¿Cómo programar una tarea si el usuario ha iniciado sesión o no en PowerShell?
- 13. ¿Cómo puedo retrasar una tarea usando Apio?
- 14. Python twisted: ¿cómo programar?
- 15. ¿Cómo debo programar una simulación de física?
- 16. Cómo programar una capa CANopen simple
- 17. ¿Cómo puedo programar una GUI en MATLAB?
- 18. ¿Cómo programar programáticamente una variable global (módulo)?
- 19. programar tareas ejecutables en java
- 20. Ejecutar una tarea Ant en Maven solo si se establece una propiedad
- 21. Usando tarea ant Maven para instalar frasco para repositorio local
- 22. ¿Cómo programar un procedimiento almacenado?
- 23. Tarea repetitiva de Android
- 24. ¿Cómo programar hex2bin en Javascript?
- 25. Cómo forzar una excepción de una tarea para ser observada en una tarea de continuación?
- 26. Cómo crear una tarea en primer plano?
- 27. ¿Cómo forzar la cancelación de una tarea?
- 28. ¿Cómo poner una tarea (sfBaseTask) en unitest?
- 29. ¿Cómo reiniciar/reutilizar una tarea recurrente?
- 30. ¿Cómo reprogramar una tarea usando un ScheduledExecutorService?
esto sólo reemplaza la necesidad de ejecutar un plugin de Maven con la necesidad de ejecutar otro Maven Plugin. –
@JensSchauder: No, no es así. Mojo-Executor proporciona una API simple de Java que invoca los complementos de Maven en su nombre. ¡Invocar plugins Maven directamente requiere mucho trabajo pesado! – Gili
Ok, eso no estaba claro desde la página del proyecto para mí. –