制作Maven原型:如何在项目的一代上运行mojo?

我正在创建一个Maven原型,我正在寻找其他原型的来源.

我能算出how files and folders are createdhow substitution occurs within files of an archetype.

现在我想编写一些代码,这些代码在原型运行新项目时运行,操作复制的文件并执行其他操作.

我怎么做 ? guide to making archetypes似乎过时了,从未提及过.

最佳答案 我使用archetype maven插件的属性-Dgoal.在此属性中,您可以指定其他目标,以便立即在从原型创建的项目上运行.

所以,我在我的maven原型项目中创建了一个新的maven插件模块,这个模块包含了我想要执行的所有其他java逻辑.我不需要在生成的项目的新创建的pom.xml中指定此插件.

更多细节:这是maven-plugin的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yourGroupId</groupId>
<artifactId>init-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>   

<dependencies>       
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-project</artifactId>
        <version>3.0-alpha-2</version>
    </dependency>
</dependencies>

这是Mojo:

/**
 * @goal maven-plugin-init
 */
public class InitMojo extends AbstractMojo
{    
    /**
     * @parameter expression="${project.basedir}"
     */
    private File basedir;
    public void execute() throws MojoExecutionException, MojoFailureException
    {
       //write initialization logic here
    }
}

因此,在“basedir”中将成为新创建的项目的基础.

唯一的问题是如何将我们的原型的输入参数传递给我们的初始化插件.我只是在新创建的项目的根目录中使用archetype创建一个文件“initial.properties”并存储所有输入参数.然后在初始化插件中读取此文件.

要启动您的原型,请使用以下命令:mvn archetype:generate $archetype_properties -Dgoals = yourGroupId:init-maven-plugin:maven-plugin-init

点赞