【问题标题】:Generate Maven archetype from Java code从 Java 代码生成 Maven 原型
【发布时间】:2013-05-08 14:42:20
【问题描述】:

我想知道是否可以在 Java 代码中运行 maven 命令:archetype:generate。 我已经用 maven embedder 试过了,但是这个库已经被弃用了。

我想做一个原型:从远程目录生成,并捕获原型所需的属性。

我要运行的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

在您执行此请求后,对于某些原型,有必要的属性。 我想在 GUI 屏幕上显示这些属性,就像 m2eclipse 插件一样,所以用户可以填写这些属性。

有人有建议吗?

【问题讨论】:

    标签: java maven catalog maven-archetype


    【解决方案1】:

    如果一切都失败了,你可以使用Runtime.exec()

    【讨论】:

    • 我不想依赖 Maven 安装。使用 maven embedder,我不必在机器上安装 Maven,这就是我想要的。
    【解决方案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 );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多