java maven自定义模板搭建项目
博客专区 > ftutor 的博客 > 博客详情
java maven自定义模板搭建项目
ftutor 发表于1年前
java maven自定义模板搭建项目
  • 发表于 1年前
  • 阅读 88
  • 收藏 1
  • 点赞 1
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 使用eclipse/ideal 都可以通过向导创建maven 工程,其支持的模板成百上千,虽然比较强大,但是每当看到那些眼花缭乱的模板,都有种不知所错的感觉,况且这些模板,和公司的规范可能差别很大,生成项目后,还需要花费大量的时间去修改,而现实中,公司的项目都遵循一定的规范,如果能够自定义自己的模板,那么必然能够提高开发效率并减少出错的几率。

1.背景

使用eclipse/ideal 都可以通过向导创建maven 工程,其支持的模板成百上千,虽然比较强大,但是每当看到那些眼花缭乱的模板,都有种不知所错的感觉,况且这些模板,和公司的规范可能差别很大,生成项目后,还需要花费大量的时间去修改,而现实中,公司的项目都遵循一定的规范,如果能够自定义自己的模板,那么必然能够提高开发效率并减少出错的几率。

2. maven-archetype-plugin

此插件能够帮助我们自定义项目模板,它不仅支持交互式创建项目,还支持一键创建项目,它既支持创建单个项目模板,还能够支持同时创建多个项目的模板。

2.1 创建单个项目的模板

单项目创建 包含如下几步:

mvn archetype:create-from-project

cd target/generated-sources/archetype

mvn install

mvn archetype:generate -DarchetypeCatalog=local

2.2 创建包含多个module的项目模板。

多项目创建,其基本步骤同上,但是如果想增加个性化的需求,那么需要深入了解其高级特性.

2.2.1 模板的目录结构

运行mvn archetype:create-from-project,${basedir}/target/generate-sources/目录下会生成模板项目,结构如下:

$ tree
.
|____pom.xml
|____src
| |____main
| | |____resources
| | | |____archetype-resources
| | | | |____pom.xml
| | | | |____src
| | | | | |____main
| | | | | | |____java
| | | | | | | |______packageInPathFormat__
| | | | | | | | |____Sample.java
| | | | | |____test
| | | | | | |____java
| | | | | | | |______packageInPathFormat__
| | | | | | | | |____SampleTest.java
| | | |____META-INF
| | | | |____maven
| | | | | |____archetype-metadata.xml
    1. pom.xml: 项目模板的pom,一般无需修改。
    1. src/main/resources/archetype-resources: maven根据此目录下的文件生成项目,此位置的文件将被拷贝或者过滤到待生成的项目中。
    1. src/main/resources/archetype-resources/pom.xml: 生成项目的最外层pom结构。
    1. src/main/resources/META-INF/maven/archetype-metadata.xml: 生成项目的配置文件,其中可以自定义项目复制或过滤文件,设置交互变量以及子模块生成的方式。详细说明
    1. 当我们修改模板配置时,要使更改配置的模板项目立即生效,需要运行mvn clean install。

2.3 子模块名称修改

一般情况下,mvn archetype:create-from-project生成的模板不够灵活,此模板生成的项目,其子模块名称不能够更改,否则在生成项目的过程中,会出现找不到模板目录的问题。archetype-metadata.xml module标签中唯一可用的变量是:rootArtifactId, 借助它可以实现子模块名称的部分修改。module中dir 如果需要引入变量,变量名前后必须有两个下划线,当子模块需要自定义模块名称时,需要借助这个变量,也就是子模块和父模块名称中必须存在一段相同的字符。当且仅当子模块的名称中包含__rootArtifactId__才能够实现自定义子模块名称。

example-archetype
├── pom.xml
└── src
    ├── main
       └── resources
           ├── META-INF
           │   └── maven
           │       └── archetype-metadata.xml
           └── archetype-resources
               ├── __rootArtifactId__-module1
               │   ├── pom.xml
               │   └── src
               │       ├── main
               │       │   ├── java
               │       │   └── resources
               │       └── test
               │           └── java
               │           └── resources
               ├── __rootArtifactId__-module2
               │   ├── pom.xml
               │   └── src
               │       ├── main
               │       │   ├── java
               │       │   └── resources
               │       └── test
               │           └── java
               │           └── resources
               └── pom.xml

2.4 默认值设置

<requiredProperties>
     <requiredProperty key="groupId">
       <defaultValue>com.company</defaultValue>
     </requiredProperty>
     <requiredProperty key="artifactId">
       <defaultValue>test-sample</defaultValue>
     </requiredProperty>
     <requiredProperty key="version">
       <defaultValue>1.0.0-SNAPSHOT</defaultValue>
     </requiredProperty>
     <requiredProperty key="package">
       <defaultValue>com.company.xx</defaultValue>
     </requiredProperty>
</requiredProperties>

这些本来需要手动输入赋值的变量,可以直接使用默认值进行替换,实现一键生成项目的作用,在设置默认值的时候需要同时配置在/src/main/resources/META-INF/maven/archetype-metadata.xml和/src/test/resources/projects/basic/archetype.properties中。

2.5 自定义packageName

我们使用mvn archetype:create-from-project 生成的模板项目中,package名称可能不是我们想要的,此时需要自定义package名称,可以使用:mvn archetype:create-from-project -DpackageName=com.company.xxxxxx 实现手动package截取,具体请点击

2.6 使用

2.6.1 本机运行

在${basedir}/target/generated-sources/archetype/目录下 运行mvn install 会在~/.m2/目录下生产archetype-catalog.xml,这里面定义了本机所有自定义模板

<?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.dianping</groupId>
      <artifactId>sample-archetype</artifactId>
      <version>1.0.0.0-SNAPSHOT</version>
      <description>sample-archetype</description>
    </archetype>
  </archetypes>
</archetype-catalog>

在控制台任意目录中运行如下命令,即可创建新项目

mvn archetype:generate 
        -DarchetypeArtifactId=sample-archetype 
        -DarchetypeGroupId=com.dianping 
        -DarchetypeVersion=1.0.0.0-SNAPSHOT 
        -DgroupId=com.dianping 
        -DartifactId=wed-sample 
        -DarchetypeCatalog=local 
        -Dpackage=com.dianping.wed.demo

2.6.2 远程部署

在${basedir}/target/generated-sources/archetype/目录下运行mvn deploy 发布到私有远程仓库 ,然后运行如下命令,即可快速新建项目.

mvn archetype:generate 
        -DarchetypeArtifactId=sample-archetype 
        -DarchetypeGroupId=com.dianping 
        -DarchetypeVersion=1.0.0.0-SNAPSHOT 
        -DgroupId=com.dianping 
        -DartifactId=wed-sample 
        -DarchetypeCatalog=internal,remote 
        -Dpackage=com.dianping.wed.demo

3 总结

此插件包含的goal很多,每个goal包含的参数也较为繁多,功能非常强大,掌握它的使用,只需要维护有限的几份项目模板,就能够快速开发出功能强大、且非常灵活的项目骨架。

4 参考文档

标签: maven archetype java
共有 人打赏支持
粉丝 4
博文 2
码字总数 2320
×
ftutor
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: