Maven Archetype

项目作为模板

打包生成archetype

/opt/software/deploy-maven17/bin/mvn clean archetype:create-from-project -s /opt/software/deploy-maven17/config/settings.xml

其中-s表示指定的settings文件,默认会使用/root/.m2/settings.xml

另注意:当在idea中执行时,会由于有.idea文件夹的原因,导致打包容易出现插件占用文件而执行失败。

发布archetype

cd target/generated-sources/archetype
/opt/software/deploy-maven17/bin/mvn deploy -s /opt/software/deploy-maven17/config/settings.xml

下载

mvn archetype:generate
-DarchetypeGroupId=com.my.app-template
-DarchetypeArtifactId=my-template-archetype
-DarchetypeVersion=1.0.0-SNAPSHOT
-DgroupId=com.my.app
-DartifactId=my-app
-Dpackage=com.my.app
-Dversion=1.0.0-SNAPSHOT
-DappName=my-app

高级用法

对于模板希望有些内容需要被下载方统一被替换,因此需要使用高级使用方式。
例如:XXX为模板统一定义的占位格式要求

AppXXXConfiguration.java -> AppCarConfiguration

1. pom.xml引入archetype plugin

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-archetype-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <propertyFile>archetype.properties</propertyFile>
                    <encoding>UTF-8</encoding>               <archetypeFilteredExtentions>java,xml,yaml,yml,properties,md</archetypeFilteredExtentions>
                </configuration>
            </plugin>
        </plugins>

2. 工程根目录下定义archetype.properties

在工程根目录下创建archetype.properties,此名称和maven-archetype-plugin中定义的propertyFile名称一致
archetype.properties文件中填写占位符对应关系:
例如:

AppClassName=XXXX
appName=xxxx

3. 执行mvn archetype:create-from-project

执行生成archetype的命令

5. 移除修改文件

执行archetype命令后,真正打包发布的文件会出现在target/generated-sources/archetype下
image

  • 修改pom.xml,移除archetype-plugin文件
  • 移除.idea,.iml等与项目无关的信息
  • META-INF下archetype-metadata.xml文件中defaultValue移除掉,让使用者必须输入

6. maven Clean Install

安装到本地可以试验,安装到本地的无法被找到下载,因此需要再执行mvn archetype:crawl ,或者下载使用本地 -DarchetypeCatalog=local

注意:

  1. 类和包之类文件的占位符archetype使用前后双下划线占位,例如:XXXX
  2. 当不适用plugin时,自己定义archetype-metadata.xml中的配置时,且要求用户必须输入时,因有整合测试需要key对应的实际值,因此会报错,需要手动在archetype/src/test/resources/projects/basic/archetype.properties中自行添加custom_app=XXXX
 <requiredProperties>
    <requiredProperty key="custom_app">
      <!--<defaultValue>XXXX</defaultValue>-->
    </requiredProperty>
  </requiredProperties>
posted on 2024-03-18 17:27  zhaoqiang1980  阅读(11)  评论(0编辑  收藏  举报