• 近期将进行后台系统升级,如有访问不畅,请稍后再试!
  • 极客文库-知识库上线!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 每日更新优质编程文章!
  • 更多功能模块开发中。。。

Maven的这三个用法你一定要会!

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

1、自定义 archeType 模板的创建

1.1、什么是 archeType

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

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

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

1.2、创建 archetype

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

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

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

1.3、生成 archetype 模板

先 cdtarget/generated-sources/archetype/

然后执行 mvn install

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

mvnarchetype:crawl

来看一看它里面的内容:

1.4、使用 archetype 模板

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

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

项目创建成功!

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

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

2、自定义插件

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

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

2.1、插件提供者

插件提供者项目结构:

2.1.1、修改 packaging

2.1.2、修改 pom

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

2.1.3、coding 业务逻辑

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

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

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

@Mojo 定义插件的 goal 名字。

2.1.4、clean and install

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

2.2、插件消费者

插件消费者 : 项目结构

2.2.1、修改 pom

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

2.2.2、如何传递参数给 plugin

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

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

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

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

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

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、项目结构

3.2、pom.xml

3.3、三个 application.properties

3.4、打包

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

本教程中的项目源码:

https://github.com/fantj/maven-tutorial


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Maven 的这三个用法你一定要会!
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00