把项目打包成Maven Archetype(多模块项目脚手架)

1、示例项目

在这里插入图片描述

2、在pom.xml中添加archetype插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>3.2.0</version>
</plugin>

3、打包排除某些目录

当我们使用maven-archetype-plugin 插件基于当前项目生成一个 archetype 模板项目时,默认的该插件会把当前项目下所有的文件都会打包到 jar包中。很多时候我们希望在 build 的时候能过滤一些非必要的文件目录,如 .idea、项目 README.md 说明文件等等,这时候我们需要在构建的时候,配置一个 archetype.properties 文件参数,并在其中定义 excludePattern 属性来过滤文件或目录。

在项目目录下创建archetype.properties,内容如下:

# 打包过滤文件
excludePatterns=.idea/*,.git,*.iml,.idea/

excludePatterns 可以指定多个过滤条件,以英文逗号分割即可,不过需要注意的是,如果想过滤整个目录,如 .idea 目录,需要配置为: .idea/* 而不能仅填写为 idea。

4、包含.gitignore

# 注意__是2个下划线
把.gitignore重命名为__gitignore__

在上面的archetype.properties中加入gitignore=.gitignore

5、进入示例项目,执行以下命令

mvn archetype:create-from-project --settings D:\DevelopTools\apache-maven-3.6.3\conf\settings.xml -Darchetype.properties=archetype.properties

运行完后会在target目录生成模板
在这里插入图片描述
因为我这项目的主目录与子目录前缀不一样,所以生成的模板要手工替换,如果一样的话会自动替换为__rootArtifactId__
在这里插入图片描述
自动替换的示例:
在这里插入图片描述
既然不能自动替换那就手工更改

6、替换占位符

接着要替换占位符,比如每个项目名字不一样,上述moyu要替换成项目名,每个项目package前缀不一样,也要替换;

常用占位符如下:

占位符含义
__rootArtifactId__做文件夹名替换用,注意__是双下划线,例如__rootArtifactId__-dao, 占位符来动态获取父工程的ArtifactId
${rootArtifactId}保存用户输入的值作为项目名(maven在用户运行原型时在提示符中询问为artifactid:的值)
${artifactId}如果您的项目由一个模块组成,则此变量的值将与${rootArtifactId}相同,但如果项目包含多个模块,则此变量将由每个模块文件夹中的模块名替换
${package}用户为项目提供的包,也在用户运行原型时由maven提示
${packageInPathFormat}${package}变量的值相同,但将“.”替换为字符“/”,例如对于包com.foo.bar,此变量为com/foo/bar
${groupId}用户为项目提供的groupid,在用户运行原型时由maven提示
${version}用户为项目提供的版本号,在用户运行原型时由maven提示

首先替换module的名字,把moyu替换成__rootArtifactId__,注意两边是两个下划线
在这里插入图片描述
接着依次点开每一个编译后的文件,查看一下有没有没替换的占位符,正常编译好的,动态部分都会替换掉,如下图:
在这里插入图片描述
再查找项目中其它与示例项目moyu有关的项,改为对应的占位符,如下这些依赖
在这里插入图片描述
替换后的效果
在这里插入图片描述
找到项目中的每一个文件都要全替换成占位符

但是也会有一些替换错的,有时候package前缀和groupId一样时,一些package会被替换成groupId,我们要手动修正它;

当前项目里,这个application.yml就没有被替换掉
在这里插入图片描述
替换成以下内容:
在这里插入图片描述
接着是核心文件:archetype-metadata.xml
在这里插入图片描述

找到modules节点,每个modules都要替换,module属性介绍:
​ id:子模块工程的artifactId
​ dir:子模块工程源文件在archetype-resources里对应的directory
​ name :子模块的名字.,可定制化自己的服务模块。

在这里插入图片描述
替换如下:
在这里插入图片描述
如果有其他自定义参数,比如项目中的xxx和类名中的Xxx需要替换,可以自定义参数,自定义参数在archetype-metadata.xml里加入<requiredProperties>
key是属性名,defaultValue时默认名

 <!--属性变量定义-->
 <requiredProperties>
   <requiredProperty key="appName">
     <defaultValue>szcz</defaultValue>
   </requiredProperty>
   <requiredProperty key="appNameCap">
     <defaultValue>Szcz</defaultValue>
   </requiredProperty>
 </requiredProperties>

在这里插入图片描述
去替换文件中的内容,路径中的参数是双下划线_参数名_,文件内部的参数是${参数名}
在这里插入图片描述
这种改了文件名的,需要在target\test-classes\projects\basic\project\basic找到原目录删除原文件,不然生成的archetype会同时生成旧的文件。
在这里插入图片描述
一般xml文件、java文件模板会自动替换占位符,另外有一些自定义文件,模板不会识别,比如sh脚本、md文件等,我们以Dockerfile为例(随便自己定义个文件也行),在archetype-metadata.xml写<fileSets>

    <fileSets>
        <!-- 写进模板,但不替换的占位符的,不设置 filtered="true"即可-->
        <!-- 写进模板,要替换的占位符的,filtered="true"-->
        <fileSet encoding="UTF-8" filtered="true">
            <directory></directory>
            <includes>
                <include>Dockerfile</include>
                <include>README.md</include>
            </includes>
        </fileSet>
    </fileSets>

每一个module下面如果有默认不识别的文件也要单独配置:
在这里插入图片描述
去替换文件中的内容:
在这里插入图片描述
注:如果有自定义参数,需要在test/resources/projects/archetype.properties里配置自定义参数
在这里插入图片描述
spring.factories内容替换
在这里插入图片描述
在archetype-metadata.xml写<fileSets>上正面内容

<module id="${rootArtifactId}-starter-cloud" dir="__rootArtifactId__-starter-cloud" name="${rootArtifactId}-starter-cloud">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.factories</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>

效果图
在这里插入图片描述

7、安装Archetype

全部修改完后,进入target\generated-sources\archetype下,执行mvn install安装到本地
执行成功后,在我们本地的maven仓库里会有一个archetype-catalog.xml文件。

8、使用Archetype

在一个新的目录下执行以下命令,会把新项目生成到对应的目录下

# 其中-D后面接的时自定义参数,也可以接默认参数,如-DgroupId
mvn archetype:generate -DarchetypeCatalog=local -DappName=szcz -DappNameCap=Szcz

按提示输入对应的内容即可
在这里插入图片描述

9、删除脚手架只要删除archetype-catalog.xml对应的节点就可以了

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值