文档章节

java maven自定义模板搭建项目

ftutor
 ftutor
发布于 2016/08/11 23:13
字数 1364
阅读 191
收藏 1
点赞 1
评论 0

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 参考文档

© 著作权归作者所有

共有 人打赏支持
ftutor
粉丝 3
博文 2
码字总数 2320
作品 0
长宁
基于Spring Boot的登录demo

原文首发于我的博客 本项目基于Spring Boot框架,搭建了一个简单的登录微服务。 Spring Boot相对于传统的SSM(Spring MVC + Mybatis + Spring)框架用起来更加简单,不需要进行复杂的配置,方便...

tikyle
05/14
0
0
eclipse 下创建maven web工程

1.安装完maven插件后,点击window--preferences 2.点击User Settings 选择解压后maven下conf文件夹中的settings.xml 再点击Apply. 3.再点击Installations选项,设置好maven安装目录. 2.1现在...

NotFoundException
2013/01/22
0
0
Eclipse环境搭建全集(个人使用的环境,Eclipse+SVN+Maven+JbossTo...

1.JDK的配置 去官网下载JDK,需要注意的是JDK 32位,Eclipse也必须是32位.64位JDK对应Eclipse64位. 1.安装JDK,安装过程中最好自定义安装目录等信息,如我们选择安装目录为E:softwareJavajdk1.6....

Zhao-Qian
2012/07/11
0
3
2.2 Selenium 环境搭建

Java 环境搭建 下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装JDK 配置Java 环境 校验是否安装完成 控制台输入: java –version 提示版......

米阳MeYoung
04/24
0
0
🛠VS Code编辑器配置Java开发环境

🛠VS Code编辑器配置Java开发环境 一、简述 及讨论 由于学校课程的原因,是基本以java开发为主线的课程,但是我对java兴趣不大,又加上我不太喜欢 「Eclipse」这个java的集成开发环境(简称...

Cc卿
06/02
0
0
Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器...

FantJ
05/26
0
0
Java easycms 2.0 发布,简单灵活的 Java CMS

Java easycms 2.0 发布。 精简 js 框架,删除不开源的 ace ui 框架,改为更简洁,理论支持 n 级节点的层级菜单 默认使用嵌入式数据库 h2 使用 jetty 作为 servlet 容器启动服务,配合 maven ...

姜小北
04/26
0
1
maven私服nexus之校验和(checksums)

maven是开源的项目构建工具。 nexus可以用来搭建maven私服。 checksum(校验和):用于校验数据的完整性和准确性。 maven nexus中可以查看构件的Checksums:SHA1 checksum和MD5 checksum。 ...

donhui
2014/10/10
0
0
Linux 安装配置maven3.0 以及搭建nexus私服

一、软件准备 1、apache-maven-3.0-bin.tar.gz 下载地址:http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0-bin.tar.gz 2、nexus-oss-webapp-1.8.0-bundle.tar.gz 下载......

银月光海
2015/05/14
0
0
使用Eclipse-Maven-git做Java开发(9)--eclipse新建maven结构工程

上一篇博客讲了如何使用eclipse的maven工程新建向导新建maven工程,但是发现新建出来的工程并不可用,经过探索,使用eclipse的普通向导新建符合maven结构的工程并且转换为maven工程,这个方法...

阿信sxq
2015/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES15-JAVA API 索引管理

1.创建连接 创建连接demo package com.sean.esapi.client;import java.net.InetSocketAddress;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.clien......

贾峰uk
3分钟前
0
0
单点登录的设计,从单域名到多域名(经验分享)

个人实践总结,最初的的需求,多个产品线都在同一个根域名下面。 独立的用户中心分离,单独负责用户登录和用户信息获取、变更等处理逻辑。 第一步,用户登录成功,分配给用户一个memToken(令...

小海bug
4分钟前
0
0
合格前端第十二弹-TypeScript + 大型项目

写在前面 TypeScript 已经出来很久了,很多大公司很多大项目也都在使用它进行开发。上个月,我这边也正式跟进一个对集团的大型运维类项目。 项目要做的事情大致分为以下几个大模块 一站式管理...

qiangdada
8分钟前
0
0
编程学习之如何在Node.js中优化服务器端渲染?[图]

编程学习之如何在Node.js中优化服务器端渲染?[图] 在 Airbnb,我们花了数年时间将所有前端代码迁移到 React 架构,Ruby on Rails 在 Web 应用中所占的比例每天都在减少。实际上,我们很快会...

原创小博客
10分钟前
0
0
gradle学习笔记

相关文档 适合新手的 gradle 自学教程合集 Gradle教程

OSC_fly
24分钟前
0
0
Virtual Serial Port - RFC2217

Virtual Serial Port for Linux RFC-2217 The COM Port Control Protocol pyserial - RFC 2217 NetSerial - Windows Telnet COM Port - RFC Official Using Python, How do I make a virtual......

zungyiu
31分钟前
0
0
全球的IPv6部署急剧增加,中国进度较慢

导读 全球的IPv6部署继续增加,但中国在IPv6方面还需要努力,从部署图上分析,中国几乎没有几个地方是普及IPv6的。这6年来,自世界IPv6发布以来,全球网络和服务提供商的IPv6部署水平急剧增加...

问题终结者
35分钟前
1
0
好看的电影记录

星际迷航三 狂暴之路 新木乃伊 黑夜传说 铁血战士2

xd03122049
38分钟前
0
0
记录Yii2框架开发遇到微信错误提示

转载地址 记录Yii2框架开发遇到微信错误提示 微信公共号开发,提示“该公众号暂时无法提供服务,请稍后再试”,如何解决? 以前使用Yii框架的时候,并没有像Yii2,以前的Yii框架似乎用起来在...

durban
40分钟前
1
0
LSM树(Log-Structured Merge Tree)存储引擎浅析

其实每一种数据库,它都是一种抽象的数据结构的具体实现。 随着rocksDB(facebook的),levelDB(google的),以及我们熟知的hbase,他们都是使用的LSM树结构的数据库。 它的核心思路其实非常...

算法之名
54分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部