2013-05-14 3 views
1

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

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

Команда 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, поэтому пользователь может заполнить эти свойства.

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

ответ

1

Если все остальное не удается, вы можете использовать Runtime.exec().

+0

Я не хочу зависеть от установки Maven. С встроенным maven я не должен устанавливать Maven на машине, вот чего я хочу. –

1

Вы можете попытаться использовать 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); 
    } 
} 
Смежные вопросы