自定义Maven模板(Archetype)

常用的Archetype

  • macen-archetype-quickstart

  • macen-archetype-webapp

编写Archetype

自定义archetype关键目录

  • pox.xml Archetype自身的pox.xml

  • src/main/resources/archetype-resources/pom.xml 基于该Archetyoe生成的项目的POM原形

  • src/main/resources/META-INF/maven/archetype-metadata.xml Archetype的描述文件

  • src/mian/resources/archetype-resources/** 其他需要包含在Archetype中的内容

一个简单的Archetype

  • pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.vczyh.archetypes</groupId>
      <artifactId>archetype-test</artifactId>
      <version>1.0-SHAPSHOT</version>
      <packaging>jar</packaging>
    </project>
    
    复制代码
  • src/main/resources/archetype-resources/pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>${groupId}</groupId>
      <artifactId>${artifactId}</artifactId>
      <version>${version}</version>
      <packaging>war</packaging>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>${artifactId}</finalName>
      </build>
    </project>
    
    复制代码
  • src/main/resources/META-INF/maven/archetype-metadata.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <archetype-descriptor name="test">
    
    </archetype-descriptor>
    复制代码
  • 根目录运行,项目会安装到本地仓库,至此,一个简单的Archetype已经完成了

    mvn clean install
    复制代码
  • 使用Archetype,groupIdartifactIdversion对应上面的pom.xml

     mvn archetype:generate -DarchetypeGroupId="com.vczyh.archetypes" -DarchetypeArtifactId="archetype-test" -DarchetypeVersion="1.0-SHAPSHOT"
    复制代码

    生成的项目只有一个pom.xml,但也是一个Archetype

完善Archetype

  • 通过修改src/main/resources/archetype-resources/pom.xml可以添加默认依赖以及其他信息

  • 添加src/main/java src/main/resources src/test/java src/main/resources/application.properties

    //App.java
    package ${package};
    
    public class App {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
    复制代码
    # application.properties
    # 使用${port}可以获取使用archetype时输入的参数port的值
    port=${port}
    复制代码
  • 新建Archetype默认不会包含上面的目录,因此得修改src/main/resources/META-INF/maven/archetype-metadata.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <archetype-descriptor name="test">
        <fileSets>
            <!--fileSet对应一个目录以及该目录相关的包含或排除规则-->
            <!--filtered表示是否对该文件及合应用属性替换,像${x}这样的内容是否替换成命令行输入的x参数的值-->
            <!--packaged表示是否将该目录下的内容放到生成项目的包路径下-->
            <fileSet filtered="true" packaged="true">
                <!--src/main/java对应archetype-resources/src/main/java-->
                <directory>src/main/java</directory>
                <!--只包含archetype-resources/src/main/java下的.java文件-->
                <include>**/*.java</include>
            </fileSet>
            
            <!--resources一般没有包路径,所以packaged设置为false-->
            <fileSet filtered="true" packaged="false">
                <directory>src/main/resources</directory>
                <!--<include>**/*.properties</include>-->
            </fileSet>
    
            <fileSet filtered="true" packaged="true">
                <directory>src/test/java</directory>
                <include>**/*.java</include>
            </fileSet>
        </fileSets>
    
        <requiredProperties>
            <!--使用archetype时候必须要求输入的参数,archetype中可以使用${port}获取-->
            <requiredProperty key="port"/>
            <requiredProperty key="groupId">
                <!--可以设置默认值,使用archetype会使用默认值-->
                <defaultValue>com.vczyh</defaultValue>
            </requiredProperty>
        </requiredProperties>
    </archetype-descriptor>
    复制代码
  • 使用archetype创建项目

    注意application.properties中的port已经变成输入的值

生成本地仓库的Archetype Catalog

mvn archetype:crawl
复制代码

会扫描本地仓库,并且在${user}/.m2/repository生成archetype-catalog.xml,包含了遍历到的本地archetype,其中包含刚刚自定义的

<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <archetype>
      <groupId>com.vczyh.archetypes</groupId>
      <artifactId>archetype-test</artifactId>
      <version>1.0-SHAPSHOT</version>
      <description>test</description>
    </archetype>
    <archetype>
      <groupId>org.apache.maven.archetypes</groupId>
      <artifactId>maven-archetype-quickstart</artifactId>
      <version>1.3</version>
      <description>quickstart</description>
    </archetype>
    <archetype>
      <groupId>org.apache.maven.archetypes</groupId>
      <artifactId>maven-archetype-quickstart</artifactId>
      <version>1.4</version>
      <description>quickstart</description>
    </archetype>
    <archetype>
      <groupId>org.apache.maven.archetypes</groupId>
      <artifactId>maven-archetype-webapp</artifactId>
      <version>1.4</version>
      <description>webapp</description>
    </archetype>
  </archetypes>
</archetype-catalog>

复制代码

添加到Catalog的方便之处在于不用每次使用archetype时写一长串命令

mvn archetype:generate 
复制代码

选择archetype的编号,比如这里的11即可

Idea使用Archetype

添加完成后使用

如果需要额外的参数,需要在这里添加,比如示例中的port,否则创建失败

示例代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值