自定义maven骨架,可以多模块

maven骨架说白了就是一个模板,一个项目组基本开发风格都是确定的,完全可以使用模板替代,骨架和模板唯一不同之处是,骨架创建的项目可以自动替换一堆和项目名相关的东西,包括模块目录之类的。

1.创建一个普通的多模块项目

不管使用什么方式创建一个多模块的项目是第一步,但是这个多模块项目需要注意的是,如果想要模块目录名和项目名存在联动关系,这个时候就要确定了,比如项目名加dome,模块1名称叫dome1,模块2名称叫dome2,这样使用骨架生成项目时dome可以随着项目名称自动被替换。
在这里插入图片描述
项目里需要带上你作为模块必要的一些东西,比如基础配置文件,基础启动类之类的。
在项目的pom文件中添加如下编译插件

<build>
        <extensions>
            <extension>
                <groupId>org.apache.maven.archetype</groupId>
                <artifactId>archetype-packaging</artifactId>
                <version>3.2.0</version>
            </extension>
        </extensions>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-archetype-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <addDefaultExcludes>false</addDefaultExcludes>      <!-- 解决复制.gitignore的问题 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-archetype-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <propertyFile>archetype.properties</propertyFile>   <!-- 解决排除.idea目录的问题 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

在项目下添加archetype.properties文件内容如下,这些东西都可以自定义的

## generate for archetype-metadata.xml
excludePatterns=archetype.properties,*.iml,.idea/,.idea/libraries,logs/,build.sh


## generate gitignore file
gitignore=.gitignore

执行命令mvn archetype:create-from-project

2找到骨架的源文件并进行细微调整

找到项目的target\generated-sources目录下有一个archetype文件,这个就是骨架文件,使用开发工具打开这个项目,最外层的pom文件可以进行正常调整比如骨架名称版本之类的。
需要注意的是主要内容都在src/main/resources下在META-INF/maven目录下有archetype-metadata.xml文件,这个文件是基础配置,可以有标签进行默认属性配置,
标签进行文件设置,这个标签上可以加filtered="true"属性,加了这个属性的会进行属性替换,下面说到的文件上的属性替换前提都是加了这个标签属性的,下面的是我的配置

 <requiredProperties>
    <requiredProperty key="classNameSuffix">
      <defaultValue>Fuck</defaultValue>
    </requiredProperty>
    <requiredProperty key="gitignore">
      <defaultValue>.gitignore</defaultValue>
    </requiredProperty>
    <requiredProperty key="groupId">
            <defaultValue>com.hornsun</defaultValue>
        </requiredProperty>
        <requiredProperty key="artifactId">
            <defaultValue>base</defaultValue>
        </requiredProperty>
        <requiredProperty key="version">
          <defaultValue>1.0.0</defaultValue>
        </requiredProperty>
        <requiredProperty key="package">
            <defaultValue>com.hornsun</defaultValue>
        </requiredProperty>
  </requiredProperties>
  <fileSets>
    <fileSet encoding="UTF-8">
      <directory/>
      <includes>
        <include>CHANGELOG.MD</include>
        <include>gitignore</include>
        <include>使用说明.MD</include>
      </includes>
    </fileSet>
  </fileSets>
  <modules>
    <module id="${rootArtifactId}_service" dir="__rootArtifactId___service" name="${rootArtifactId}_service">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/test/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    <module id="${rootArtifactId}_impl" dir="__rootArtifactId___impl" name="${rootArtifactId}_impl">
      <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>**/*.xml</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.yml</include>
            <include>**/*.sql</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/test/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
  </modules>

我加了自定义属性classNameSuffix,一般我进行install的时候会报错,这是因为默认跑了测试,我们可以把test目录下的archetype.properties文件修改下如我的

#Sat Mar 13 15:36:00 CST 2021
package=it.pkg
version=0.1-SNAPSHOT
groupId=archetype.it
gitignore=.gitignore
artifactId=basic
classNameSuffix=basic
## generate for archetype-metadata.xml
excludePatterns=archetype.properties,*.iml,.idea/,.idea/libraries,logs/,build.sh


## generate gitignore file
gitignore=.gitignore

3使用Velocity进行特殊定制

在标签覆盖范围内的文件上可以使用脚本语言进行特殊开发
使用如下的代码

#set( $systemName = ${rootArtifactId} )
#if(${rootArtifactId.indexOf("-")}!=-1)
    #set( $cc = ${rootArtifactId.split("-")})
    #if($cc != $null && ${cc.size()} > 0)
        #set( $lastIndex = $cc.size() - 1 )
        #set( $systemName = $cc[$lastIndex] )
    #end
#end
 
@ConfigurationProperties("${systemName}")
@Data
public class CommonProperties {

所有的文件可以使用上面的形式进行自定义。
当一切修改后,使用mvn install,这样就能生成骨架jar包,可以把这个jar上传到自己的maven仓库也可以在本地使用使用mvn archetype:crawl进行本地使用,

4使用刚刚创建的骨架

可以使用idea添加刚刚的骨架也可以使用命令行直接创建项目
在这里插入图片描述
使用命令行的话可以运行下面的命令mvn archetype:generate -Drepository=local按照提示选择自己骨架的序号,一步一步创建就好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值