Создание архетипа Maven из кода Java

Я хочу знать, можно ли запустить команду maven: archetype:generate в коде Java. Я пробовал это с помощью встроенного модуля maven, но эта библиотека устарела.

Я хочу создать архетип: сгенерировать из удаленного каталога и зафиксировать необходимые свойства архетипа.

Команда maven, которую я хочу запустить, например:

mvn archetype:generate \
    -DgroupId=com.maven \
    -DartifactId=test \
    -DarchetypeVersion=1.0-alpha-4 \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DinteractiveMode=false \
    -DarchetypeCatalog=http://repo1.maven.org/maven2/archetype-catalog.xml

для некоторых архетипов есть обязательные свойства после того, как вы сделаете этот запрос. Я хочу отобразить эти свойства на экране графического интерфейса, как это делает плагин m2eclipse, чтобы пользователь мог заполнить эти свойства.

У кого-нибудь есть предложение?


person Elmar Maan    schedule 14.05.2013    source источник


Ответы (2)


Вы можете попробовать использовать Maven Invoker.

Добавьте эту зависимость в pom.xml:

<dependency>
    <groupId>org.apache.maven.shared</groupId>
    <artifactId>maven-invoker</artifactId>
    <version>2.1.1</version>
</dependency>

А вот как может выглядеть код:

import org.apache.maven.shared.invoker.*;

import java.util.Collections;
import java.util.Properties;

public class MavenInvoker {

    public static void main(String[] args) throws MavenInvocationException {
        InvocationRequest request = new DefaultInvocationRequest();
        request.setGoals( Collections.singletonList("archetype:generate") );
        request.setInteractive(false);
        Properties properties = new Properties();
        properties.setProperty("groupId", "com.maven");
        properties.setProperty("artifactId", "test");
        properties.setProperty("archetypeVersion", "1.0-alpha-4");
        properties.setProperty("archetypeGroupId", "org.apache.maven.archetypes");
        properties.setProperty("archetypeArtifactId", "maven-archetype-j2ee-simple");
        properties.setProperty("archetypeCatalog", "http://repo1.maven.org/maven2/archetype-catalog.xml");
        request.setProperties(properties);
        Invoker invoker = new DefaultInvoker();
        InvocationResult result = invoker.execute( request );
    }
}
person maba    schedule 14.05.2013