老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

时间:2023-01-16 17:39:33

前言

又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了。

公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!

在工作中经常有新项目需要创建,此时就会有三种常用的方式

CC 大法 新建项目,然后找到之前的各种工具类,复制粘贴进来,此时还不一定能跑起来,然后再进行各种调试。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

CD 大法 复制老项目,然后改 module 名字,依赖名字,删除老代码,当然也不一定能跑起来,此时再进行各种调试。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

当然,这里肯定不是使用这两种办法,下面咱们介绍一种更简洁的方式,使用 maven archetype 生成项目模版,一键创建项目。

Action!!!

什么是 Archetype ?

简而言之,Archetype 是 Maven 项目模板工具箱。

An archetype is defined as an original pattern or model from which all other things of the same kind are made.

原型被定义为原始样式或模型,从中可以制成所有其他同类项目。

官方解释,简洁明了,就是使用已有的项目,生成一个模版。以后使用这个模版就可以快速生成结构相同的项目了。在团队开发中很有用。

其实就是官方解释,地址贴上来:http://maven.apache.org/archetype/maven-archetype-plugin/index.html

下面使用 IDEA 作为演示工具,一步一步开始介绍。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

准备模版项目

这里还是要有一个模版项目,比如这样:

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

这是一个多 module 项目,一个简单的 demo

  1. 使用了 nacos 作为注册中心;
  2. fegin 作为调用工具;
  3. 有通用校验 token 工具类;
  4. 假设里面也有一些公司的公共配置(MQ,链路监控,统一日志等)。

当然这个项目是可以跑起来的。新创建的项目也是这个模版。

进入主题

使用命令

**archetype:generate **

这样是基于当前项目生成,你也可以使用官网的用法分别指定参数

  1. mvn archetype:generate 然后一步一步按照提示输入;
  2. 一次性输入,其中 DarchetypeGroupId 、DarchetypeArtifactId 、DarchetypeVersion 为生成的 Archetype 项目的组织版本。
mvn archetype:generate                                  \
-DarchetypeGroupId=<archetype-groupId> \
-DarchetypeArtifactId=<archetype-artifactId> \
-DarchetypeVersion=<archetype-version> \
-DgroupId=<my.groupid> \
-DartifactId=<my-artifactId>

高级用法 mvn clean archetype:create-from-project

执行图示如下:

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

执行后返回 IDEA 查看项目,在 target/generated-sources 目录下的 archetype 即生成的项目模版。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

结构如图所示:

  1. main/resources/archetype-resources:项目的模版,生成新项目,就是根据这块的代码进行生成的。
    1. .idea 无用,删除掉。
    2. __rootArtifactId__xxx 项目的各个 module
  2. main/resources/META-INF/maven/archetype-metadata.xml:模版工程的元数据配置。

可以把 archetype 拷出去,这是一个单独的工程模版,拷出去之后,使用 IDEA 打开。

下面开始介绍 archetype 里面都有什么。

archetype 模版项目介绍

使用 IDEA 打开之后发现,还是一个 Maven 项目。

archetype-resources

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

打开 pom 文件,可以看到里面 ${groupId}${artifactId}${version} 使用占位符指定的组织版本,这些就是新创建项目时指定的。

archetype-metadata.xml

archetype-metadata.xml 里面为元数据配置。

  • fileSet:用来生成一些项目中的文件。如果文件或目录名称包含 __property__ 模式,则将其替换为相应的属性值。
属性 类型 描述
filtered boolean 过滤文集,将指定文件直接复制不需要修改。默认值为:false。
packaged boolean 打包文件,指定文件将在package属性之前的目录结构中生成/复制。它们可以是非打包的,这意味着所选文件将在没有该前缀的情况下生成/复制。默认值为:false。
encoding String 过滤内容时使用的编码。

fileSet 包含以下元素:

元素 类型 描述
directory String 生成项目文件的目录
includes/include* List 包含文件
excludes/exclude* List 排除文件

因为生成项目不需要 .idea *.iml 文件,所以直接删除:

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  • module 就是要生成的项目一共几个 module
属性 类型 描述
id String The module's artifactId.
dir String The module's directory.
name String The module's name.
元素 类型 描述
fileSets/fileSet* List 文件
modules/module* List 模块

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

可以看出里面就是自己的项目模版。

__rootArtifactId__-controller 在生成的时候,就会根据传入的 artifactId 生成指定的 module 名字。

使用

  1. clean install

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  1. IDEA Add Archetype

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  1. 选择使用 Archetype 生成新项目

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  1. 填写新生成项目的名字等

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  1. 生成新项目

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

扩展

Q: 如何自定义包路径?

A: 可以使用 requiredProperties 自定义参数。通过传入自定义的参数,来生成自定的包路径。

比如发现新生成项目的包路径都是 com.liuzhihang.archetype,这样肯定是不行的,每个项目有每个项目自己的包路径。只需要做以下修改:

  1. requiredProperties 添加到项目中,然后添加新变量 middlePackage
<requiredProperties>
<!--使用archetype时候必须要求输入的参数-->
<requiredProperty key="groupId">
<!--可以设置默认值,使用archetype会使用默认值-->
<defaultValue>com.liuzhihang</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.liuzhihang</defaultValue>
</requiredProperty>
<requiredProperty key="middlePackage">
<defaultValue>${rootArtifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
  1. 修改模版的文件名

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

如果文件或目录名称包含 __property__ 模式,则将其替换为相应的属性值。到这里还不行,因为生成的包名还没改。

  1. 修改内部文件的包路径。包括 .java 、** .xml** 、** .properties** 等。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

  1. 重新 clean install

注:此时可能会报错,需要在 src/test/resources/projects/basic/archetype.properties 下添加 middlePackage=basic 再重新尝试下。

在生成时注意指定 middlePackage 属性。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

Q: 我想自定义 Application 的名字怎么弄?

A: 同样使用 requiredProperties 自定义参数。

<requiredProperty key="appName">
</requiredProperty>

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

当然也可以起一个通用的名字。

Q: 别的小伙伴怎么用?

A: 当然是 deploy 到私服了, 在 pom 里面添加如下配置,指定自己公司的私服。deploy ,这样就可以和小伙伴一起愉快的使用啦。

<!-- 远程仓库 -->
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://liuzhihang.com:xxxx/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://liuzhihang.com:xxxx/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>

Q: 我要怎么从 IDEA 删除 Archetype ​?

A: 这么好用怎么舍得删除​呢?只要找到以下路径

liuzhihang % > pwd
/Users/liuzhihang/Library/Caches/JetBrains/IntelliJIdea2020.1/Maven/Indices

里面有一个 UserArchetypes.xml​, 打开,删除掉里面的 archetype 就行。

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)

相关资料

代码:https://github.com/liuzhihang/archetype-demo

老大说新项目的结构和 xxx 项目一样就可以了,我 ……(使用 Maven Archetype 快速创建项目)的更多相关文章

  1. vue-cli3&period;X快速创建项目

    1.安装 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过以下方式先卸载它: npm unin ...

  2. SpringBoot——IDEA使用 Spring Initializer快速创建项目【四】

    前言 使用Spring Initializer快速创建项目 步骤 首先肯定是打开我们的IDEA的编辑器呀~ 创建项目 File -> New -> Project Spring Initi ...

  3. maven archetype生成自定义项目原型&lpar;模板&rpar;

    maven archetype可以将一个项目做成项目原型,之后只需要以此原型来创建项目,那么初始创建的项目便具有原型项目中的一切配置和代码.通俗讲就是一个项目模板. eclipse中那些快速生成mav ...

  4. springBoot&lpar;2&rpar;---快速创建项目,初解jackson

    快速创建项目,初解jackson 一.快速创建项目 springboot官网提供了工具类自动创建web应用:网址:http://start.spring.io/ 官网页面 1.快速创建一个 选择web ...

  5. 怎么用Vuecli 3&period;0快速创建项目

    一.安装 1.安装node.js,这里需要注意的是,Vue CLI 3需要 nodeJs ≥ 8.9,所以我们去中文官方下载地址:http://nodejs.cn/download/,下载最新版本即可 ...

  6. vue cli 3&period;0快速创建项目

    本地安装vue-cli 前置条件 更新npm到最新版本 命令行运行: npm install -g npmnpm就自动为我们更新到最新版本 淘宝npm镜像使用方法 npm config set reg ...

  7. 【HttpRunner v3&period;x】笔记 ——2&period; 用脚手架快速创建项目

    环境装好了,相信很多童鞋已经迫不及待的想run起来了,但是面对一个陌生的框架又无从下手.没关系,我们可以用脚手架来快速生成一个httprunner项目. 一.快速生成项目 我们不妨先输入httprun ...

  8. vue-cli3快速创建项目

    文档:https://cli.vuejs.org/zh/guide/ 条件: npm 更至最新 node >=8.9 1.全局安装 npm install -g @vue/cli 或 yarn ...

  9. 使用Maven命令行快速创建项目骨架(archetype)

      > mvn archetype:generate 接下来就会输出一些列带索引变化的archetype项可供我们选择,然后提示我们选择一个编号,可以直接回车选择默认的编号(392),然后就跟着 ...

随机推荐

  1. 背影渐变shape写法

    <?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...

  2. Java集合---HashSet的源码分析

    一.  HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. 二.  ...

  3. Microsoft Office下载地址

    文件名: cn_office_professional_plus_2016_x86_x64_dvd_6969182.iso 语言: Chinese – Simplified 文件大小:2.41 GB ...

  4. EL表达式介绍

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  5. StarlingMVC Framework 原理。。。

    向starlingmvc 中添加bean后..会根据Metadata标签,分别交给不同的Processor去处理...然后会执行每个bean的postConstruct函数.相当于初始化函数...可以 ...

  6. Understanding Manycore Scalability of File Systems

    多核场景下,不同文件系统,文件操作的性能评估.

  7. 三角网格&lpar;Triangle Mesh&rpar;的理解

    最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑.车辆.人体,当然还有茶壶等.图14.1 ...

  8. 【转载】Windows系统下删除ubuntu

    原始日期:2013-11-02 15:51 以windows7为例:   用MbrFix.exe修复MBR 卸载Windows/Linux双系统中的Ubuntu1.如果你有Windows系统安装盘/启 ...

  9. bzoj1668

    题解: 简单dp 注意最后往后面多取几个 求个最小值 代码: #include<bits/stdc++.h> using namespace std; ; int n,m,f[N],a[N ...

  10. 关于对ProgressBar定义模板的一些总结

    在之前的博客中曾经写到了一篇关于如何定义圆形进度条的文章,今天就ProgressBar再来进行一些总结,首先来介绍一下ProgressBar的结构,ProgressBar控件的模板有两个部分,我们在定 ...