Qualcuno può dare un buon esempio di utilizzo org.apache.maven.cli.MavenCli di programmazione?

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

  •  25-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare un plugin IntelliJ che le necessità di eseguire gli obiettivi Maven sul progetto corrente. Tutti i discorsi in intertubes consiglia di utilizzare il MavenEmbedder. Buona fortuna. La versione 2.0.4 non è ben supportato e non ci sono riferimenti per come usarlo.

ho dato un vortice ed ha incontrato un muro dove l'embedder non era stato inizializzato con tutti i campi di cui ha bisogno. Riflettente di iniezione privato? Eccezionale! Perché qualcuno bisogno un modo ovvio per inizializzare un oggetto?

Sembra alcune persone utilizzano una versione 2.1 con un certo successo. Sono stato in grado di trovare che in un vaso o addirittura fonti.

Sono andato a controllare la versione 3.0 del progetto embedder: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Si elimina l'oggetto MavenEmbedder tutti insieme e sembra accesso solo sostegno attraverso principali o dominio metodi su MavenCli. Qualcuno ha usato questi metodi e può dare qualche consiglio?

È stato utile?

Soluzione

Si, il non è molto in termini di documentazione delle MavenCli. L'API risulta comunque significativamente più semplice, ma mi piace ancora alcuni esempi. Ecco quello che funziona ...

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

Ci vuole dir e gestisce la fase di 'compilazione' ...

Altri suggerimenti

Configurazione Maven di lavoro per maven 3.1.1

Dipendenze

<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>

Codice

MavenCli cli = new MavenCli();

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

Le informazioni di matrice dipendenza per scopi previsti e componenti acquisiti dinamicamente può essere un po 'di confusione. E 'stato per me, perché mi sembrava che ho avuto tutti gli elementi richiesti dalla dipendenza diretta o transitiva, ma poi la risoluzione telecomando non funzionava.

Ho voluto saltare a Maven 3.3.3 (ultima a partire dal 2015/05/25). Ho ottenuto che funziona senza gli errori SISU che hanno presentato quando ho provato ad aggiornare con ottimismo alle versioni attuali di cose indicate qui (e altrove). Si tratta di un progetto con un tag che ha lavorato con l'esempio specificato a partire da oggi con JDK8.

https://github.com/mykelalvis/test-maven- embedder / albero / 20150525-lavoro

dipendenze rilevanti (SLF4J è solo così posso vedere i log)

    <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>   

L'esecuzione di questo è:

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

Probabilmente dovrebbe avere fatto un test di unità di qualche tipo.

Se qualcuno ha una soluzione superiore per embedded Maven 3.3.3 (cioè si avvicinò con un set più piccolo o più gamma-oriented delle dipendenze richieste), lascia un commento.

Per costruire il commento da @StevePerkins, e l'utilizzo di Maven versione 3.1.0,

ho dovuto escludere la dipendenza transitiva da etere-connector-carro per carro-fornitore-API per farlo funzionare.

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>
(...)

ed ecco un esempio 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");
(...)

qui

C'è una matrice dipendenza per ciascuna versione di Maven-embedder, ad esempio per la 3.2.5: http://maven.apache.org/ rif / 3.2.5 / Maven-embedder / dependencies.html

In base a che ho dovuto usare org.apache.maven:maven-embedder:jar:3.2.5, org.apache.maven:maven-aether-provider:jar:3.2.5 e org.apache.maven.wagon:wagon-provider-api:jar:2.8.

Si risolve anche dipendenza molto vecchia biblioteca Guava, dal momento che questa versione utilizza 18,0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top