0ca611bb428131a4cabef2cc39ed4719.gif

本文中将介绍maven的自定义插件(入门实战)自定义archeType模板(实战)按环境打包(实战)三个在私服中常常需用的操作。

1、自定义archeType模板

1.1、什么是archeType

我们在创建maven项目的时候,你会发现有这么多的apache提供的模板。

f26b913b2baf0cc6dad364362429f9bf.png

或者使用mvn archetype:generate命令来快速创建maven项目,也会有很多个选项,让你选择模板序号。那每个模板之间有什么区别呢?

每个模板里其实就是附带不同的依赖和插件。一般在公司私服里都会有属于本公司的一套archeType模板,里面有着调试好的项目用到的依赖包和版本号。

1.2、创建archetype

假如自己已经有了一个maven项目,想给该项目创建一个archeType模板。

cd 到项目根目录下执行(pom.xml同级目录)。

782b07d16b7bcd30ff6268d63b380aff.png

此时会在项目target下生成这些文件:

6ddd704f206fd29c3218694819e02f11.png

1.3、生成archetype模板

先 cdtarget/generated-sources/archetype/

然后执行 mvn install

执行成功后,执行crawl命令,在本地仓库的根目录生成archetype-catalog.xml骨架配置文件:

mvnarchetype:crawl

552b59f19bb617ae9ec051a77ebfe363.png

来看一看它里面的内容:

fd5ce4164f1022f9af6d88bccc0d7b93.png

1.4、使用archetype模板

执行mvn archetype:generate -DarchetypeCatalog=local从本地archeType模板中创建项目。

f944335fcdf2fdf14f67c6fbc6db1987.png

然后会让你选择模板序号和groupId artifactId version和package信息:

9d34dd61e2687778b71fdcc7a6116c0a.png

项目创建成功!

当然,也可以使用IDEA来帮我们用图形界面使用archeType模板创建项目:

67859b3a2dcbccd6147964f4c1767751.png

bd29cb049091567394557cdd080d306a.png

d646fa977e1c79701ac718cce6641dff.png

后面的就与创建普通项目相同了,不做演示。

2、自定义插件

在这里我只是做了简单的示例,更复杂的功能开发请参考mojo的API:

https://maven.apache.org/developers/mojo-api-specification.html

2.1、插件提供者

插件提供者项目结构:

bc5f89d8a55eeb0172bfce0f11b3f74d.png

2.1.1、修改packaging

8e3885534103ad7c1e1694840944fa1e.png

2.1.2、修改pom

cd04c43abe0ece45b8025516b2d9235e.png

这两个依赖是自定义插件必须的依赖,代表了它是一个Mojo工程,里面包含了一些Mojo的接口和抽象类以及注解。

2.1.3、coding业务逻辑

babf180e59558220d1d30c6b1aad4da7.png

注意这里面的@Parameter @Mojo LifecyclePhase.PACKAGE都是org.apache.maven.plugins.annotations包下的:

c3a6612db07588ecaa05578a7aefdfd9.png

@Parameter注解会获取消费者配置文件中的变量值并赋值。

defaultPhase =LifecyclePhase.PACKAGE声明了该插件触发的生命周期。

@Mojo定义插件的goal名字。

2.1.4、clean and install

执行mvn clean install,在target目录下会生成这样一个jar包,这就是插件包。

90aba69af5f35d4f4d14f90e2051251a.png

2.2、插件消费者

插件消费者 : 项目结构

49fdf4e0c60fa0f6e1eed69a361b0b6c.png

2.2.1、修改pom

644baf2ef0c1b1d39d407579ed3fa4d1.png

如果不加,我们只能通过执行插件或者执行命令的方式来执行,如果想让它在执行package的时候自动执行,就需要设置该属性,可以把它理解成hook。

2.2.2、如何传递参数给plugin

在插件提供者中,有个MyMojo的类,有这样一段代码:

53b34cc7db7e36934ecae4a9cb054ef3.png

它和你用过的spring注解一样,也是用来以注解的形式获取参数的值。

相对应的,在插件消费者的配置中我们就应该相应的给出参数的定义:

f0836247a002a2328b59a79a73e08a1b.png

上面的配置与变量名一一对应即可。这时候你会发现maven插件中自动会添加一个plugins选项:

25fda81be30bb13e579fced5f2bf44da.png

执行该插件:mvnmyprovide:fantj 或者直接点击:

f9f828437b7caf8cc8508d2a9a7d48ea.png

3、Profile按环境打包

在日常开发中,我们项目的开发环境和生产环境以及测试环境往往是不同的,比如:数据库的url等。在项目上生产环境时,就需要修改这些参数,给开发造成不便。为了解决该问题,Maven 2.0引入了构建配置文件的概念(build profiles)。

它能干什么呢?

假如你的生产环境和开发环境所需环境配置不同,生产环境配置文件是pro.properties,开发环境配置文件是dev.properties,那么用maven profile ,你可以实现打包开发环境jar包的时候只将dev.properties打包并使用,生产环境打包同理。

在哪里声明呢?

它可以在每个项目的pom.xml文件中声明,也可以在maven的用户setting.xml下声明,也可以在maven全局环境下设置setting.xml,详情如下。

1.Per Project

Defined in the POM itself (pom.xml).

2.Per User

Defined in the Maven-settings(%USER_HOME%/.m2/settings.xml)

3.Global

Defined in the globalMaven-settings (${maven.home}/conf/settings.xml)

4.Profile descriptor

不支持3.0,详情请看:

https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html#Maven3.xCompatibilityNotes-profiles.xml

虽然有这么多define的方式,但是我们一般使用的是第一种defined in the pom,因为不见得每个项目的生产环境都一模一样,当然这个也是因个人情况而异。

实战

3.1、项目结构

d7a47bc9fe1bca784dfbb30655c81e48.png

3.2、pom.xml

686368a66fd3c570b0bd6c37c0051317.png

3.3、三个application.properties

b20c6d6c276707e703bdcb735bc60afb.png

3.4、打包

2d8193875ef68b9be44f960d19347ed5.png

a065ca90c00908eae35d5634b6a96085.png

可以看到只将pro/application.properties进行了编译。

e57ce06e222f5ce9ae47b746a0518c00.gif来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

相关推荐

推荐文章

  • 微服务架构下的分布式限流方案思考

  • 重磅揭晓!Flink Forward Asia 2019 议程完整出炉,门票送送送!

  • 互联网公司中,只有阿里没裁员?阿里员工:3.25不是一直在裁

最近活动

  • 2019最新CKA备考指南

  • 腾讯大数据星火计划--Angel技术沙龙 对外报名正式启动!

  • 红帽企业版Linux8新特性

7ada64c040a3fa5bbe1c96b1ed8df447.gif点击【阅读原文】更多IT技术圈干货

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐