¿Puede alguien dar un buen ejemplo del uso de org.apache.maven.cli.MavenCli programación?

StackOverflow https://stackoverflow.com/questions/4206679

  •  25-09-2019
  •  | 
  •  

Pregunta

Estoy intentando crear un plugin para IntelliJ que las necesidades para ejecutar los objetivos de Maven en el proyecto actual. Toda la charla en las intertubes recomienda utilizar el MavenEmbedder. Buena suerte con eso. La versión 2.0.4 no está bien apoyado y no hay referencias de cómo usarlo.

Me lo dio un giro y se topó con un muro en el que el dispositivo de inserción no se ha inicializado con todos los campos que necesita. Reflectante inyección miembro privado? ¡Increíble! ¿Por qué necesitamos a nadie de una manera obvia para inicializar un objeto?

Parece que algunas personas están utilizando una versión 2.1 con cierto éxito. No he sido capaz de encontrar que en un frasco o incluso fuentes.

Me fue desprotegido y la versión 3.0 del proyecto de incrustación: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Se elimina el objeto MavenEmbedder todos juntos y parece que sólo el acceso de apoyo a través de los principales métodos o dominio sobre MavenCli. ¿Alguien ha utilizado estos métodos y puede dar un consejo?

¿Fue útil?

Solución

Sí, el no es mucho en el camino de la documentación de MavenCli. El API es de manera significante más simple, pero todavía me gustaría algunos ejemplos. Aquí hay una que funciona ...

MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
        "/home/aioffe/workspace/MiscMaven",
        System.out, System.out);
System.out.println("result: " + result);

Se necesita un directorio y se ejecuta la fase 'compilación' ...

Otros consejos

configuración experta de Trabajo para maven 3.1.1

Dependencias

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-wagon</artifactId>
        <version>0.9.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

Código

MavenCli cli = new MavenCli();

cli.doMain(new String[]{"clean", "compile"}, "project_dir", System.out, System.out);

La información matriz de dependencias para los alcances previstos y componentes adquiridos dinámicamente puede ser un poco confuso. Era para mí, ya que me pareció que me dieron todos los elementos requeridos por la dependencia directa o transitiva, pero entonces resolución mando no funcionaba.

Yo quería saltar a Maven 3.3.3 (la última a partir del 25/05/2015). Lo tengo trabajo sin los errores sisu que presentaron cuando traté de actualizar con optimismo a las versiones actuales de las cosas especificados aquí (y en otros lugares). Se trata de un proyecto con una etiqueta que trabajó con el ejemplo especificado a partir de hoy usando JDK8.

https://github.com/mykelalvis/test-maven- embedder / árbol / 20150525- de trabajo

deps relevantes (SLF4J es sólo para que pueda ver los registros)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency>   

La ejecución de este es:

rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java

Probablemente debería haber hecho una prueba de unidad de algún tipo.

Si alguien tiene una solución superior para incrustado Maven 3.3.3 (es decir, se acercó con un conjunto más pequeño o más orientado gama de dependencias requeridas), por favor publicarlos.

Para construir en el comentario de @StevePerkins, y utilizando la versión 3.1.0 maven,

he tenido que excluir la dependencia transitiva de éter-conector-vagón a vagón-proveedor-api para que funcione.

pom.xml:

(...)
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-embedder</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.aether</groupId>
    <artifactId>aether-connector-wagon</artifactId>
    <version>0.9.0.M2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-provider-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-http</artifactId>
    <version>2.5</version>
    <scope>test</scope>
</dependency>
(...)

y aquí es un ejemplo de Java:

(...)
MavenCli cli = new MavenCli();

ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();

PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);

cli.doMain( new String[] { "clean" }, new File("."), out, err );

String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)

aquí

Hay una matriz de dependencias para cada versión de-embedder maven, por ejemplo para 3.2.5: http://maven.apache.org/ ref / 3.2.5 / maven-embedder / dependencies.html

Sobre la base de que tenía que utilizar org.apache.maven:maven-embedder:jar:3.2.5, org.apache.maven:maven-aether-provider:jar:3.2.5, y org.apache.maven.wagon:wagon-provider-api:jar:2.8.

También corrige la dependencia de la biblioteca de guayaba muy antigua, ya que esta versión utiliza 18.0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top