Der „Maven Embedder“ ist eine Möglichkeit, Maven in Java-Anwendungen einzubetten und Maven-Funktionen programmatisch aufzurufen. Damit kannst du Maven in deinem Code verwenden, um Build- und Dependency-Management-Funktionen auszuführen, ohne externe Prozesse aufrufen zu müssen.
Man braucht nur eine Abhängigkeit:
1 2 3 4 5 |
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>4.0.0-alpha-7</version> </dependency> |
Das Apache Maven Build-Tool ist ein weit verbreitetes Werkzeug in der Java-Entwicklungswelt, das die Automatisierung von Build-, Test- und Abhängigkeitsverwaltungsaufgaben erleichtert. Normalerweise wird Maven über die Befehlszeile oder in Build-Skripten verwendet. In einigen Szenarien kann es jedoch erforderlich sein, Maven in Java-Anwendungen einzubetten, um Maven-Funktionen programmatisch aufzurufen. Das Maven Embedder ermöglicht genau das. Was ist der Maven Embedder?
Der Maven Embedder ist eine Bibliothek und eine Sammlung von APIs, mit denen Entwickler Maven-Funktionen in ihre Java-Anwendungen einbetten können. Anstatt externe Maven-Prozesse auszuführen, ermöglicht der Embedder die Interaktion mit Maven-Funktionen über Java-Code. Dies ist besonders nützlich, wenn du spezialisierte Build- oder Dependency-Management-Logik in deiner Anwendung benötigst. Hier ein Beispiel, welche eine Datei mit den Abhängigkeiten in eine Datei mit Hilfe des dependency:list Goals erzeugt.
Das Plugin muss natürlich auch im Projekt sein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>analyze</id> <goals> <goal>analyze-only</goal> </goals> <configuration> <failOnWarning>false</failOnWarning> <outputXML>true</outputXML> </configuration> </execution> </executions> </plugin> </plugins> |
Hier die Beispiel-Methode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private int createDependencyFileList(String workingDirectory, String outputFileName) { // es muss evl. ein .mvn Verz. im Projekt vorhanden sein! String[] mavenArgs = new String[] { "dependency:list", "-DexcludeTransitive=false", "-DoutputFile=" + outputFileName }; System.setProperty(MavenCli.MULTIMODULE_PROJECT_DIRECTORY, workingDirectory); MavenCli mavenCli = new MavenCli(); int resultCode = mavenCli.doMain(mavenArgs, workingDirectory, System.out, System.err); if (resultCode == 0) { LOG.info("Maven command executed successfully. Result in File {}", workingDirectory + outputFileName); } else { LOG.error("Maven command {} execution failed in Project {}", mavenArgs[0], outputFileName); } return resultCode; } |