maven实战总结,工作中常见操作 中

简介: maven实战总结,工作中常见操作 中

插件

Maven 三套生命周期定义各个阶段不做任何实际工作,实际工作都是由插件来完成的,每个生命周期阶段都是由插件的目标来完成。在 pom 文件中声明如下(打包源码文件插件):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.1.1</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>verify</phase>
          <goals>
              <goal>jar-no-fork</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

插件目标

一个插件有可能有多个功能、每个功能就是一个目标。比如 maven-dependency-plugin 有十多个目标,每个目标对应了一个功能。

插件的目标为 dependency:analyze、dependency:tree和dependency:list。

通用写法:冒号前面是插件前缀,冒号后面是插件的目标。比如 compiler:compile。

76b0185211368123e375d9161091847.png

插件绑定

1cb0b08fdc5c9e37889e14f2ab69ca7.png

内置绑定

为实现快速构建,Maven 有一套内置的插件绑定。三套生命周期的插件绑定具体如下(其实是各个生命周期阶段与插件的目标的绑定)。

其中 default 生命周期的构建方式会其打包类型有关、打包类型在POM中 packaging 指定。一般有 jar、war 两种类型。下面是默认绑定插件与生命周期关系图:

a2fe30191e0669a7a395b36c3776d4a.png

自定义绑定

自定义绑定允许我们自己掌控插件目标与生命周期的结合。以生成项目主代码的源码 jar 为例。

使用到的插件和它的目标为:maven-source-plugin:jar-no-fork。将其绑定到 default 生命周期阶段 verify 上(可以任意指定三套生命周期的任意阶段)。

<build>
  <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
          <execution>
            <id>attach-sources</id> 
            <!-- 指定作用在生命周期的哪个阶段 -->
            <phase>verify</phase> 
            <goals>
               <!-- 指定执行绑定插件的哪些目标 -->
                <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
  </plugins>
</build>

插件配置

使用命令行配置

在 maven 命令中加入 -D 参数,并伴随一个参数键=参数值的形式,来配置插件目标参数。

如:maven-surefire-plugin 插件提供一个 maven.test.skip 参数,当值为 true 时会跳过执行测试:

 -- 对比 mvn install
mvn install –Dmaven.test.skip=true

使用 pom 全局配置

在声明插件的时候,对插件进行一个全局配置,后面所有使用该插件的都要遵循这个配置。比如指定 maven-compile-plugin 编译 1.7 版本的源文件:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
       <fork>true</fork>
       <source>1.7</source>
       <target>1.7</target>
   </configuration>
</plugin>

聚合与继承

聚合:为了一次构建多个项目模块,就需要对多个项目模块进行聚合

<modules>
    <module>模块一</module>
    <module>模块二</module>
    <module>模块三</module>
</modules>

继承:为了消除重复,把很多相同的配置提取出来,例如:dependency、grouptId,version 等

<parent>  
    <groupId>com.xxxx.maven</groupId>
    <artifactId>parent-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../ParentProject/pom.xml</relativePath>  
</parent>

以下的元素是可以被继承的:

groupId,项目组ID;

version,项目版本;

description,项目描述信息;

organazation,项目的组织信息;

inceptionYear,项目的创始年份;

developers,项目开发者信息;

contributors,项目的贡献者信息;

distributionManagement,项目的部署信息;

issueManagement,项目的缺陷跟踪系统信息;

ciManagement,项目的持续集成系统信息;

scm,项目的版本控制系统信息;

mailingLists,项目的邮件列表信息;

properties,自定义的Maven属性;

dependencies,项目的依赖配置;

dependencyManagement,项目的依赖管理配置;

repositories,项目的仓库配置;

build,包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;

reporting,包括项目的报告输出目录配置、报告插件配置。

注意下面的元素,这些都是不能被继承的:

artifactId

name

prerequisites

聚合与继承之间的关系

两者共同点为,打方式必须都是 pom

在实际的项目中,一个 pom 既是聚合 pom 又是父 pom

注:父 pom 中使用 dependencies 引入的依赖也会被子 pom 继承,所以不要将过多的实际依赖放在父 pom,父 pom 只用于管理,使用 dependencyManagement 标签。

灵活构建

使用属性、 resources 插件资源过滤功能(filter)和 Maven 的 profile 功能,实现环境的灵活切换

目录
相关文章
|
3月前
|
Java Maven 数据安全/隐私保护
maven发布jar包到私服以及从私服下载jar包的操作
maven发布jar包到私服以及从私服下载jar包的操作
|
30天前
|
XML Java Shell
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
78 1
|
7月前
|
Java 应用服务中间件 数据库连接
Maven入门案例实战
Maven入门案例实战
80 0
|
9月前
|
Java 测试技术 Maven
在IDEA工具中常见的一些Maven操作<第六课>(二)
在IDEA工具中常见的一些Maven操作<第六课>(二)
132 0
|
9月前
|
Java Maven
在IDEA工具中常见的一些Maven操作<第六课>(一)
在IDEA工具中常见的一些Maven操作<第六课>(一)
54 0
|
11月前
|
JavaScript Java 数据库连接
实战SSM_O2O商铺_03项目结构规划及Maven配置
实战SSM_O2O商铺_03项目结构规划及Maven配置
58 0
|
Java fastjson 程序员
3分钟为女同事解决Maven依赖冲突,这样操作,它不香吗?
这天小林无所事事准备下班,突然听见隔壁小美在哭泣,正(hao)义(se)的小林过去关切的问 “小美,你怎么了?是不是被该死的王经理欺负了?”, 小美抽泣着点点头 “经理叫我把这个 Maven 的红色波浪线去掉,可是我一直去不掉。”
|
Java Maven 网络架构
Maven 操作文档与代码示例
Maven 操作文档与代码示例
80 0
Maven 操作文档与代码示例
|
Java Maven
maven实战总结,工作中常见操作 下
maven实战总结,工作中常见操作 下
94 0
|
Oracle 前端开发 Java
maven实战总结,工作中常见操作 上
maven实战总结,工作中常见操作 上
74 0
maven实战总结,工作中常见操作   上

热门文章

最新文章

推荐镜像

更多