0.作者介绍
柳志崇,2008 年计算机专业毕业,一直从事于移动互联网及 O2O 新零售业务领域的工作,参与过京东到家多个亿级 PV 系统的研发与架构,对高并发有着丰富的实战经验。
1.首先需要一个现成的项目,预览一下
localhost:didi-standard-project didi$ ll /Users/didi/work/git/didi-standard-project
total 32
drwxr-xr-x 11 didi staff 352 7 21 18:14 .
drwxr-xr-x 20 didi staff 640 7 21 18:12 ..
drwxr-xr-x 12 didi staff 384 7 21 18:10 .idea
-rw-r--r-- 1 didi staff 51 7 21 12:33 README.md
drwxr-xr-x 6 didi staff 192 7 21 18:14 didi-standard-project-dao
drwxr-xr-x 5 didi staff 160 7 21 18:14 didi-standard-project-domain
drwxr-xr-x 5 didi staff 160 7 21 18:14 didi-standard-project-service
drwxr-xr-x 5 didi staff 160 7 21 18:14 didi-standard-project-util
drwxr-xr-x 5 didi staff 160 7 21 18:14 didi-standard-project-web
-rw-r--r-- 1 didi staff 2938 7 21 16:34 didi-standard-project.iml
-rw-r--r-- 1 didi staff 5353 7 21 16:44 pom.xml
2.进入现有项目根目录,运行命令
cd /Users/didi/work/git/didi-standard-project
mvn archetype:create-from-project
执行成功后会在现有项目根目录新增一个文件夹,名字叫做target,预览下该目录
$ tree /Users/didi/work/git/didi-standard-project/target/ -L 6
/Users/didi/work/git/didi-standard-project/target/
└── generated-sources
└── archetype
├── pom.xml
├── src
│ ├── main
│ │ └── resources
│ │ ├── META-INF
│ │ └── archetype-resources
│ └── test
│ └── resources
│ └── projects
└── target
├── classes
│ ├── META-INF
│ │ └── maven
│ └── archetype-resources
│ ├── README.md
│ ├── __artifactId__.iml
│ ├── __rootArtifactId__-dao
│ ├── __rootArtifactId__-domain
│ ├── __rootArtifactId__-service
│ ├── __rootArtifactId__-util
│ ├── __rootArtifactId__-web
│ └── pom.xml
├── didi-standard-project-archetype-1.0.0-SNAPSHOT.jar
└── test-classes
└── projects
└── basic
23 directories, 5 files
3.进一步执行mvn install命令
cd /Users/didi/work/git/didi-standard-project/target/generated-sources/archetype/
mvn install
正常情况下maven仓库目录下会新建一个名叫archetype-catalog.xml的文件
得到maven仓库路径
mvn help:evaluate -Dexpression=settings.localRepository | grep -v '\[INFO\]'
/Users/didi/.m2/repository
archetype-catalog.xml具体内容如下
more /Users/didi/.m2/repository/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.xxx</groupId>
<artifactId>didi-standard-project-archetype</artifactId>
<version>1.0.0-SNAPSHOT</version>
<description>项目脚手架,初衷是方便大家快速创建Java工程,有兴趣的小伙伴可以加入进来一起完善。</description>
</archetype>
</archetypes>
</archetype-catalog>
4.大功告成,接下来创建项目测试一下
cd /Users/didi/work/temp
mvn archetype:generate -DarchetypeCatalog=local
接下来依次输入:
1: local -> com.xxx:didi-standard-project-archetype (项目脚手架,初衷是方便大家快速创建Java工程,有兴趣的小伙伴可以加入进来一起完善。)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1
Define value for property 'groupId': com.alioo
Define value for property 'artifactId': hello3
Define value for property 'version' 1.0-SNAPSHOT: : 1.0.0-SNAPSHOT
Define value for property 'package' com.alioo: : com.alioo.dd
Confirm properties configuration:
groupId: com.alioo
artifactId: hello3
version: 1.0.0-SNAPSHOT
package: com.alioo.dd
Y:
至此已经根据模板生成好新项目了,快来看看吧
tree hello3
hello3
├── README.md
├── hello3-dao
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── alioo
│ │ └── dd
│ │ └── dao
│ │ └── XxxDAO.java
│ └── resources
│ ├── db
│ │ └── migration
│ │ └── V1_1__init.sql
│ └── mybatis
│ └── mybatis-conf.xml
├── hello3-domain
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── com
│ └── alioo
│ └── dd
│ ├── constant
│ │ ├── Constant.java
│ │ └── WEB_STATUS.java
│ └── domain
│ ├── XxxDto.java
│ └── base
│ ├── HttpClientResponse.java
│ ├── Page.java
│ ├── Response.java
│ └── RestApiResponse.java
├── hello3-service
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── com
│ └── alioo
│ └── dd
│ └── service
│ ├── XxxService.java
│ └── XxxServiceImpl.java
├── hello3-util
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── com
│ └── alioo
│ └── dd
│ ├── exception
│ │ ├── AppException.java
│ │ ├── AppExecutionException.java
│ │ ├── BadRequestException.java
│ │ ├── FileTypeNotSupportException.java
│ │ ├── GlobalExceptionHandler.java
│ │ ├── InvalidParameterException.java
│ │ ├── NotLoginException.java
│ │ ├── OperationForbiddenException.java
│ │ ├── ParamErrorException.java
│ │ └── ResourceNotFoundException.java
│ └── util
│ ├── CommonBeanUtil.java
│ ├── CookieUtil.java
│ ├── DateTimeUtil.java
│ ├── FileUtil.java
│ ├── HandlerMethodUtils.java
│ ├── HttpClient.java
│ ├── JsonUtil.java
│ ├── StringUtil.java
│ └── spring
│ └── SpringUtil.java
├── hello3-web
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── alioo
│ │ │ └── dd
│ │ │ └── web
│ │ │ ├── WebMain.java
│ │ │ ├── config
│ │ │ │ ├── FlywayConfiguration.java
│ │ │ │ ├── InterceptorConfig.java
│ │ │ │ └── Swagger2Configuration.java
│ │ │ ├── controller
│ │ │ │ ├── AliasController.java
│ │ │ │ └── rest
│ │ │ │ └── test
│ │ │ │ └── RestTestController.java
│ │ │ └── interceptor
│ │ │ ├── LoginInterceptor.java
│ │ │ └── annotation
│ │ │ └── LoginNoRequired.java
│ │ └── resources
│ │ ├── application.yml
│ │ └── logback-spring.xml
│ └── test
│ ├── java
│ │ └── com
│ │ └── alioo
│ │ └── dd
│ │ └── dbhelper
│ │ ├── Config.java
│ │ ├── ToDAO.java
│ │ ├── ToModel.java
│ │ └── Utils.java
│ └── resources
│ ├── application.yml
│ └── logback-spring.xml
└── pom.xml
62 directories, 54 files
5.如果还想将这个模板工程分享供其它人使用呢
在前面执行mvn install改成mvn deploy即可上传到私服,上传私服需要注意在pom.xml(pom.xml路径:/Users/didi/work/git/didi-standard-project/target/generated-sources/archetype/pom.xml)中添加如下内容
<distributionManagement>
<repository>
<id>central</id>
<name>artifactory-main-releases</name>
<url>http://artifactory.xxx.com:80/artifactory/libs-release</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>artifactory-main-snapshots</name>
<url>http://artifactory.xxx.com:80/artifactory/libs-snapshot</url>
</snapshotRepository>
</distributionManagement>
观察日志deploy是否成功,可以进一步到私服控制台(一般情况私服网址是artifactory.xxx.com/)上去检查确认
6.其它人如何利用私服上的模板来生成新项目呢
mvn archetype:generate -DarchetypeGroupId=com.xxx -DarchetypeArtifactId=didi-standard-project-archetype -DarchetypeVersion=1.0.0-SNAPSHOT -DarchetypeRepository=local
小提示:
- 上面的archetypeVersion值为1.0.0-SNAPSHOT,不同的私服实现方式上有些区别,我了解到有些私服就没有生成1.0.0-SNAPSHOT相关的pom文件,所以只好写具体的版本号了,比如1.0.0-20180721.093712-3之类的
- 可以把这个命令保存一个bat/Shell脚本,毕竟记这么长的命令还是比较麻烦的
- 由于是前往私服去下载模板来创建工程,请确保$MVN_HOME/conf/setting.xml中已经配置好了私服地址信息,示例:
<profiles>
<profile>
<id>baseprofile</id>
<repositories>
<repository>
<id>central</id>
<name>Nexus Repository</name>
<url>http://artifactory.xxx.com/artifactory/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<localRepository>${user.home}/.m2/repository</localRepository>
<activeProfiles>
<activeProfile>baseprofile</activeProfile>
</activeProfiles>
TODO
- 过滤掉一些目录或者文件不要打包到模板里