2013-05-14 4 views
1

maven 명령을 실행할 수 있는지 알고 싶습니다. Java 코드에서 archetype : generate. Maven embedder를 사용하여이 작업을 시도했지만이 라이브러리는 더 이상 사용되지 않습니다.Java 코드에서 Maven 아키타 입 생성

원격 카탈로그에서 생성하고 아키타 입 (archetype)의 필수 속성을 캡처하고 싶습니다.

내가 실행할 받는다는 명령은, 예를 들면 : 속성이 필요한 일부 전형에 대한

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 플러그인처럼 GUI 화면에 이러한 속성을 표시하려고하므로 사용자가 이러한 속성을 채울 수 있습니다.

누구에게 의견이 있습니까?

답변

1

그 밖의 모든 것이 실패하면 Runtime.exec()을 사용할 수 있습니다.

+0

. Maven embedder를 사용하면 컴퓨터에 Maven을 설치하지 않아도됩니다. –

1

Maven Invoker을 사용해보세요.

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

을 그리고 여기에 코드가 어떻게 보이는지입니다 :

pom.xml이 종속성을 추가 내가 메이븐 설치 의존하지 않으려는

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); 
    } 
} 
관련 문제