使用Maven Archetype插件制作项目脚手架(一)

Archetype是一个Maven项目模板工具包。通过Archetype我们可以快速搭建Maven项目。比如我们在ide里面创建项目时,可以选择很多maven内置的Archetype,我们最常用的可能是maven-archetype-quickstart

当然maven提供了能力,让我们自定义项目结构,比如下图如果我们想要基于Archetype来自动生成下面多模块结构的脚手架,我们可以先手动建立下面的代码结构

然后把下面插件加入到上面项目主pom中:

xml 复制代码
<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-archetype-plugin</artifactId>
                    <version>3.0.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

然后在该项目的根目录下执行如下命令,来生成Archetype的模板:

sql 复制代码
mvn archetype:create-from-project

执行完毕后,在\target\generated-sources\archetype目录下会生成内容如下,该内容就是Archetype模板:

在该目录下执行mvn install把模板安装到本地仓库,然后就可以执行下面命令来生成自己应用的项目结构了:

bash 复制代码
mvn archetype:generate -DarchetypeGroupId=com.jiaduo -DarchetypeArtifactId=project-template-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=local -DgroupId=com.jiaduo -DartifactId=order -Dversion=1.0-SNAPSHOT -DinteractiveMode=false

生成后的项目结构如下:

当然如果你想要使用代码的调用方式,可参考如下:

cs 复制代码
public class Main {


    public static void main(String[] args) {


        String DgroupId ="com.jiaduo";
        String DartifactId ="Order";
        String Dversion ="1.0-SNAPSHOT";
        String targetDir ="/user/workspace";


        MavenCli cli = new MavenCli();
        System.setProperty("maven.multiModuleProjectDirectory","/user");
        int r = cli.doMain(new String[]{"archetype:generate",
                "-DgroupId="+DgroupId,
                "-DartifactId="+DartifactId,
                "-Dversion="+Dversion,


                "-DarchetypeGroupId=com.template",
                "-DarchetypeArtifactId=project-template-archetype",
                "-DarchetypeVersion=1.0-SNAPSHOT",
                "-DinteractiveMode=false"}, targetDir, System.out, System.out);


        System.out.println(r);
        if (r !=0){
            throw new RuntimeException("生成工程结构失败");
        }else{
            System.out.println("生成工程结构成功");
        }
    }


}
相关推荐
2302_809798327 分钟前
【JavaWeb】JDBC
java·开发语言·servlet
Pluto_CSND9 分钟前
hbase shell的常用命令
大数据·数据库·hbase
哈哈真棒26 分钟前
sparkSQL读入csv文件写入mysql(2)
数据库·mysql
Cynicism_Smile32 分钟前
Mysql 8.0.32 union all 创建视图后中文模糊查询失效
数据库·mysql
小oo呆33 分钟前
【自然语言处理与大模型】向量数据库技术
数据库·人工智能·自然语言处理
小刘不想改BUG1 小时前
LeetCode LCR 010 和为 K 的子数组 (Java)
java·算法·leetcode
MeyrlNotFound1 小时前
(二十一)Java集合框架源码深度解析
java·开发语言
正在走向自律1 小时前
2025年、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建+Maven下载及配置)
java·jvm·jdk·maven·intellij-idea
不会就选C.1 小时前
【开源分享】健康饮食管理系统(双端+论文)
java·spring boot·开源·毕业设计
永远有多远.1 小时前
【高频面试题】LRU缓存
java·缓存·面试