Maven根据一个现有的项目创建模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hl_java/article/details/81088577

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.xiaojukeji</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.xiaojukeji: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.xiaojukeji -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>

猜你喜欢

转载自blog.csdn.net/hl_java/article/details/81088577