各位小伙伴们在刚学java的时候是怎样创建spring项目的呢,有些小伙伴是使用的Spring Initializer自动生成项目结构,有些小伙伴是创建一个空的maven项目,然后自己配置对应的dependencies来创建项目。但是无论哪种方式,都无法达到我们一些定制化的需求,比如创建完整的目录结构。此时就需要一个模版,当我们每次创建这个模版对应的maven项目的时候就创建一样的目录结构,有着一样的依赖。这个模版就依赖于今天要讲的maven archetype。
maven archetype分单模块和多模块构建,这个主要是对应了第一次搭建工程的时候需要一些多模块,也对应了项目稍微成熟后需要多模块的操作,老套路,写前先贴官网介绍。
单模块
有两种方式创建单模块任务,一种是手动创建,只有大怨种才会通过手动创建去整叭,哪有人这么傻呢,哦,原来是我
当然如果有同学特别想去尝试下手动创建是什么感觉,也可以通过下文中通过代码自动生成的目录结构自己手动敲一遍,这些都是小问题。这里主要也是说如何自动生成archetype。
编写模版
首先先编写代码模版,也就是通用的目录结构及配置文件等,这里是模拟了
这应该也是我们初学或者项目比较小的时侯的经典分层,我就不想每次去创建工程的时候都要手动去整一遍,就想通过简单的命令行或者选择下就能创建出来,让我更多关注代码本身。
- 一个主启动类
- controller层
- dao层
- model(entity)层
- service层
- 公共util层
- spring的配置文件,mybatis的mapper文件
生成archetype
模版已经有了,接下来就是生成模版,可以看到现在工程下面只有pom文件和src文件,很是简单。
在和src同级的目录下使用命令行mvn archetype:create-from-project
注意第三个红圈,翻译过来就是Archetype工程在/root/markdown/md/ArcheType/mavenarchetype/target/generated-sources/archetype
被创建了,其实就是编译到了target目录,先去我们的工程(注意,是工程,不是archetype工程)看一眼
可以看到标红的就是我们的archetype工程了,切到这个目录(也就是外部工程的targe/generated-sources下的archetype工程),为了方便使用tree命令去观看,我把archetype工程的target目录给删掉
有眼尖的小伙伴可能已经发现了,不是说好是模版吗,那为什么那些controller,service层都不见了,先保留着疑问,接着往下看,如果非要这些模块,可以在这些层下面随便添加一个文件占位。
部署archetype
把archetype工程移到自定义目录下,并且采取clean install
其实到这里后就能使用了,因为maven在找包的时候会先去找本地仓库,如果只是给自己用的话完全就够了,而如果是需要分享给团队的其他同学甚至是所有人,就需要部署到远程服务器中了。对于远程部署而言大体有两种方式,一是远程服务器,二是开源仓库。对于前者而言,下载个nexus实在是
所以本篇文章主要讲部署到gitee中,首先需要在gitee中创建一个公开的仓库,接着把这个仓库克隆到本地(这里就举例保存到/root/remote-test)。然后修改archetype工程中的pom文件,添加
代码语言:javascript复制<distributionManagement>
<repository>
<id>remote-gitee</id>
<url>file:/root/remote-test</url>
</repository>
</distributionManagement>
注意上面的url就是git克隆的位置,接着运行mvn deploy
切到git克隆的目录,把刚才deploy的东西全都push到gitee中,其实就是把整个目录deploy就完事了。
使用archetype
要想使用archetype的话,命令行如下:mvn archetype:generate -DartifactId=my-project-create-from-archetype -DgroupId=com.huawei.cutey.none -DarchetypeArtifactId=mavenarchetype-archetype -DarchetypeGroupId=com.cutey.study.maven
maven中的-D是代表属性的意思,其中artifactId/groupId是要创建项目的属性,archetypeArtifactId/archetypeGroupId是archetype的属性。
上面能够创建出来完全是因为在本地的maven仓库里面install了,如果把本地仓库中的删除掉就会发现失败了,这种情况下就借助上一步中的deploy了(还记得我们是部署到了gitee中嘛)
首先需要配置maven的settings.xml,用户级别的配置默认在{user.home}/.m2/settings.xml ,全局级别的配置文件默认在{maven.conf}/settings.xml 。在<profiles> 下的<profile>下的<repositories>下添加
代码语言:javascript复制<repository>
<id>【自定义】</id>
<name>【自定义】</name>
<url>https://gitee.com/【gitee用户名】/【gitee仓库名】/raw/【gitee分支】</url>
</repository>
如果只是想运行下demo,可以直接使用我的配置
代码语言:javascript复制<repository>
<id>remote-repositry</id>
<name>Repository for gitee repository</name>
<url>https://gitee.com/cutey_none/remote-repositry/raw/master</url>
</repository>
因为仓库的标签是profile的子标签,也就是跟profile绑定的,所以得激活这个配置文件才能使用这个仓库
代码语言:javascript复制<activeProfiles>
<activeProfile>【profile中id标签的值】</activeProfile>
</activeProfiles>
紧接着还是运行这个命令行即可mvn archetype:generate -DartifactId=my-project-create-from-archetype -DgroupId=com.huawei.cutey.none -DarchetypeArtifactId=mavenarchetype-archetype -DarchetypeGroupId=com.cutey.study.maven
多模块
以上只是单模块的模版构建,现在中型项目大都是多模块工程,maven同样也支持把多模块作为archetype工程。一样先来看下整个模版的目录结构,具体里面的子模块目录我就取了默认的,这里也可以不关注它,主要聚焦于多模块。
接着和上面的套路是一样的,mvn archetype:create-from-project
,然后就在target目录下能看到
如果需求就可以修改下archetype工程目录下面的pom文件,基本的配置就是groupId和artifactId,因为我们在创建模版工程的时候也是要通过坐标去找。
紧接着还是一样,在archetype工程的根目录(可以直接进到该目录也可以把整个archetype工程拷出来)执行命令行
mvn archetype:generate -DartifactId=my-multiproject -DgroupId=com.huawei.cutey.none -DarchetypeArtifactId=multiarchetype -DarchetypeGroupId=com.cutey.study.multi.archetype
可以看到三个模块都已经自己创建出来了