美文网首页
自定义Maven模板(Archetype)

自定义Maven模板(Archetype)

作者: vczyh | 来源:发表于2018-12-27 16:32 被阅读0次

常用的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

[图片上传失败...(image-c556f9-1545899546093)]

  • 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"
    

    [图片上传失败...(image-ac65b9-1545899546093)]

    生成的项目只有一个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

    [图片上传失败...(image-93da3d-1545899546093)]

    //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创建项目

    [图片上传失败...(image-4ed378-1545899546093)]

    注意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 

[图片上传失败...(image-92b24e-1545899546093)]

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

Idea使用Archetype

[图片上传失败...(image-32ce0d-1545899546093)]

添加完成后使用

[图片上传失败...(image-827d7e-1545899546093)]

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

示例代码

相关文章

网友评论

      本文标题:自定义Maven模板(Archetype)

      本文链接:https://www.haomeiwen.com/subject/fhfdlqtx.html