Kann jemand ein gutes Beispiel für die Verwendung org.apache.maven.cli.MavenCli programmatisch geben?

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

  •  25-09-2019
  •  | 
  •  

Frage

Ich versuche, ein IntelliJ Plugin zu schaffen, dass der Bedarf maven Ziele auf dem aktuellen Projekt auszuführen. All das Gerede in dem intertubes empfiehlt die Verwendung der MavenEmbedder. Viel Glück damit. Die 2.0.4 Version ist nicht gut unterstützt und es gibt keine Hinweise dafür, wie es zu benutzen.

gab ich ihm einen Wirbel und läuft in eine Wand, wo die Einbettungs nicht mit allen Feldern initialisiert worden ist es braucht. Reflektierende Privat Mitglied Injektion? Genial! Warum sollte jemand Notwendigkeit offensichtlich, dass die Art und Weise, ein Objekt zu initialisieren?

Es scheint ein paar Leute eine 2.1-Version mit einigem Erfolg verwenden. Ich habe nicht in der Lage gewesen, dass in einem Glas oder auch Quellen zu finden.

Ich ging und ausgecheckt, die Version 3.0 des Einbettungs Projekt: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Es tut mit dem MavenEmbedder Objekt alle zusammen weg und scheint nur unterstützen den Zugriff durch die Haupt- oder DOMAIN Methoden auf MavenCli. Hat jemand diese Methoden verwendet und kann einen Rat geben?

War es hilfreich?

Lösung

Ja, ist das nicht viel in der Art und Weise der Dokumentation von MavenCli. Die API ist significatly einfacher, aber ich wurde noch, wie einige Beispiele. Hier ist eine, die ...

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

Es braucht dir und führt die 'Kompilierung' Phase ...

Andere Tipps

Arbeits Maven-Konfiguration für maven 3.1.1

Abhängigkeiten

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

Code

MavenCli cli = new MavenCli();

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

Die Abhängigkeitsmatrix Informationen zur Verfügung gestellt Bereichen und dynamisch erworbener Komponenten können ein wenig verwirrend sein. Es war für mich, da es mir schien, dass ich durch direkte oder transitive Abhängigkeit alle erforderlichen Einzelteile erhielten, aber dann entfernte Auflösung hat nicht funktioniert.

Ich wollte Maven 3.3.3 (spätestens ab 2015.05.25) springen. Ich habe es ohne die sisu Fehler arbeiten, vorgestellt, als ich versuchte optimistisch zu den aktuellen Versionen der Dinge hier angegeben zu aktualisieren (und anderswo). Dies ist ein Projekt mit einem Tag, das mit dem Beispiel arbeitete als heute angegeben mit JDK8.

https://github.com/mykelalvis/test-maven- Einbettungs / Baum / 20150525-Arbeits

Relevante deps (SLF4J ist nur so dass ich die Protokolle sehen kann)

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

das Lauf ist:

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

Wahrscheinlich hätte es einen Unit-Test von einer Art gemacht.

Wenn jemand eine bessere Lösung für eingebettete Maven 3.3.3 (das heißt kam mit einem kleineren oder mehr Bereich orientierten Satz von erforderlichen Abhängigkeiten oben) finden Sie nach ihnen.

zu bauen auf dem Kommentar von @StevePerkins und mit maven Version 3.1.0,

Ich hatte die transitive Abhängigkeit von Äthers-connector-Waggon zu Waggon-Provider-api auszuschließen es zum Laufen zu bringen.

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

und hier ist ein Java-Beispiel:

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

full Beispiel hier

Es gibt eine Abhängigkeitsmatrix für jede Version von maven-Einbettungs, z.B. für 3.2.5: http://maven.apache.org/ ref / 3.2.5 / maven-Einbettungs / dependencies.html

Auf der Grundlage, dass ich org.apache.maven:maven-embedder:jar:3.2.5, org.apache.maven:maven-aether-provider:jar:3.2.5 und org.apache.maven.wagon:wagon-provider-api:jar:2.8 verwenden.

Es behebt auch die Abhängigkeit von sehr alter Guava Bibliothek, da diese Version 18.0 verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top