第四课:Maven私服构建与插件开发.docx

一、maven 生命周期

知识点概要:

  1. 生命周期的概念与意义
  2. maven 三大生命周期与其对应的phase(阶段)
  3. 生命周期与插件的关系
  4. 生命周期与默认插件的绑定

1、生命周期的概念与意义

在项目构建时通常会包含清理、编译、测试、打包、验证、部署,文档生成等步骤,maven 统一对其进行了整理抽像成三个生命周期 (lifecycle)及各自对应的多个阶段(phase)。这么做的意义是:

  1. 每个阶段都成为了一个扩展点,可以采用不同的方式来实现,提高了扩展性与灵活性。
  2. 规范统一了maven 的执行路径。

在执行项目构建阶段时可以采用jar方式构建也可以采用war包方式构建提高了灵活性。我们可以通过命令 mvn ${phase name}直接触发指定阶段的执行如:

l  演示 phase 的执行

#执行清理phase

mvn clean

#执行compile phase

mvn compile

# 也可以同时执行 清理加编译

mvn clean compile

2、maven三大生命周期与其对应的phase(阶段)

maven 总共包含三大生生命周期

  1. clean Lifecycle :清理生命周期,用于清理项目
  2. default Lifecycle:默认生命周期,用于编译、打包、测试、部署等
  3. site Lifecycle 站点文档生成,用于构建站点文档

生命周期(lifecycle)

阶段(phase)

描述(describe)

clean Lifecycle

pre-clean

预清理

clean

清理

post-clean

清理之后

default Lifecycle

validate

验证

initialize

初始化

generate-sources

process-sources

generate-resources

process-resources

compile

编译

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources

test-compile

编译测试类

process-test-classes

test

执行测试

prepare-package

构建前准备

package

打包构建

pre-integration-test

integration-test

post-integration-test

verify

验证

install

上传到本地仓库

deploy

上传到远程仓库

site Lifecycle

pre-site

准备构建站点

site

构建站点

post-site

构建站点之后

site-deploy

站点部署

三大生命周期其相互独立执行,也可以合在一起执行。但lifecycle 中的phase 是有严格执行的顺序的,比如必须是先执行完compile 才能执行pakcage 动作,此外phase 还有包含逻辑存在,即当你执行一个phase 时 其前面的phase 会自动执行。

l  演示phase 执行

# 执行编译

mvn compile

# 执行打包就包含了编译指令的执行

mvn package

3、生命周期与插件的关系

生命周期的phase组成了项目过建的完整过程,但这些过程具体由谁来实现呢?这就是插件,maven 的核心部分代码量其实很少,其大部分实现都是由插件来完成的。比如:test 阶段就是由 maven-surefire-plugin 实现。在pom.xml 中我们可以设置指定插件目标(gogal)与phase 绑定,当项目构建到达指定phase时 就会触发些插件gogal 的执行。 一个插件有时会实现多个phase比如:maven-compiler-plugin插件分别实现了compile 和testCompile。

总结:

生命周期的 阶段 可以绑定具体的插件及目标

不同配置下同一个阶段可以对应多个插件和目标

phase==>plugin==>goal(功能)

4、生命周期与插件的默认绑定

在我们的项目当中并没有配置 maven-compiler-plugin 插件,但当我们执行compile 阶段时一样能够执行编译操作,原因是maven 默认为指定阶段绑定了插件实现。列如下以下两个操作在一定程度上是等价的。

#直接执行mvn命令

mvn compile

#直接执行compile插件目标

mvn org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

lifecycle phase 的默认绑定见下表:。

注:不同的项目类型 其默认绑定是不同的,这里只指列举了packaging 为jar 的默认绑定,全部的默认绑定参见:https://maven.apache.org/ref/3.5.4/maven-core/default-bindings.html#

二、maven 自定义插件开发

知识点:

  1. 插件的相关概念
  2. 常用插件的使用
  3. 开发一个自定义插件

1、maven 插件相关概念

插件坐标定位:

插件与普通jar 包一样包含 一组件坐标定位属性即:

groupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有即从远程仓库下载

<!-- 唯一定位到dependency 插件 -->

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<version>2.10</version>

插件执行 execution:

execution 配置包含一组指示插件如何执行的属性:

id : 执行器命名

phase:在什么阶段执行?

goals:执行一组什么目标或功能?

configuration:执行目标所需的配置文件?

l  演示一个插件的配置与使用

# 将插件依赖拷贝到指定目录

# 将插件依赖拷贝到指定目录
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>

2、常用插件的使用

除了通过配置的方式使用插件以外,Maven也提供了通过命令直接调用插件目标其命令格式如下:

mvn groupId:artifactId:version:goal -D{参数名}

l  演示通过命令执行插件

# 展示pom的依赖关系树

mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree

# 也可以直接简化版的命令,但前提必须是maven 官方插件

mvn dependency:tree

其它常用插件:

# 查看pom 文件的最终配置

mvn help:effective-pom

# 原型项目生成

archetype:generate

#快速创建一个WEB程序

mvn archetype:generate -DgroupId=tuling -DartifactId=simple-webbapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

#快速创建一个java 项目

mvn archetype:generate -DgroupId=tuling -DartifactId=simple-java -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

3、开发一个自定义插件

实现步骤:

n  创建maven 插件项目

n  设定packaging 为maven-plugin

n  添加插件依赖

n  编写插件实现逻辑

n  打包构建插件

插件 pom 配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>tuling</groupId>
<artifactId>tuling-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> <dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
</project>

插件实现类:

package com.tuling.plugin;/**
* Created by Administrator on 2018/8/8.
*/ import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter; /**
* @author Tommy
* Created by Tommy on 2018/8/8
**/
@Mojo(name = "luban")
public class LubanPlugin extends AbstractMojo {
@Parameter
String sex;
@Parameter
String describe; public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info(String.format("luban sex=%s,describe=%s", sex, describe));
}
}

三、nexus 私服搭建与核心功能

知识点概要:

  1. 私服的使用场景
  2. nexus 下载安装
  3. nexus 仓库介绍
  4. 本地远程仓库配置
  5. 发布项目至nexus 远程仓库
  6. 关于SNAPSHOT(快照)与RELEASE(释放) 版本说明

maven私服nexus的安装和配置

3、nexus 仓库介绍

3rd party:第三方仓库

Apache Snapshots:apache 快照仓库

Central: maven 中央仓库

Releases:私有发布版本仓库

Snapshots:私有 快照版本仓库

4 、本地远程仓库配置

在pom.xml 中配置远程仓库

<repositories>

<repository>

<id>nexus-public</id>

<name>my nexus repository</name>

  <url>http://192.168.0.147:9999/nexus/content/groups/public/</url>

</repository>

</repositories>

5、发布项目至nexus 远程仓库

  • 在项目pom.xml配置仓库地址

<distributionManagement>

<repository>

<id>nexus-release</id>

<name>nexus release</name>

<url>http://192.168.0.147:9999/nexus/content/repositories/releases/</url>

</repository>

<snapshotRepository>

<id>nexus-snapshot</id>

<name>nexus snapshot</name>

<url>http://192.168.0.147:9999/nexus/content/repositories/snapshots/</url>

</snapshotRepository>

</distributionManagement>

  • 在maven的设置 setting.xml 文件中配置server登录密码

<server>

<id>nexus-snapshot</id>

<username>deployment</username>

<password>deployment123</password>

</server>

<server>

<id>nexus-release</id>

<username>deployment</username>

<password>deployment123</password>

</server>

  • 执行deploy 命令

mvn deploy

==============================================

参考资料:

Nexus 3.0私服搭建及Maven配置

一、VIP课程:互联网工程专题 04-Maven私服使用与插件开发的更多相关文章

  1. 一、VIP课程:互联网工程专题 05-快速掌握Jenkins原理与核心功能

    第五课:快速掌握jenkins核心功能.docx 2.164 (2019-02) and newer: Java 8 or Java 11 一.jenkins 概述与环境配置 知识点: 关于可持续化集 ...

  2. 一、VIP课程:互联网工程专题 03-Maven基本概念与核心配置

    概要: maven 基本概念 maven 核心配置 一.maven  安装与核心概念 概要: maven 安装 maven 编译(compile) 执行测试用例(test) maven 打包 mave ...

  3. 一、VIP课程:互联网工程专题 02-Git服务搭建与版本分支管理

    第二课:搭建企业私有Git服务.docx 课程概要: GIT远程通信协议详解 基于gogs 搭建WEB管理服务 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么 ...

  4. 一、VIP课程:互联网工程专题 01-Git基本概念与核心命令掌握

    第一课:Git基本概念与核心命令掌握.docx 课程概要: GIT 体系概述 GIT 核心命令使用 GIT 底层原理 一.GIT体系概述 1.使用方式区别 从本地把文件推送远程服务,SVN只需要com ...

  5. 图灵,咕泡,鲁班学院--Java高级架构师-互联网企业级实战VIP课程(价值6380)

    课程介绍:        讲课内容涉及Java互联网技术工程框架.应用框架.        性能调优 (Tomcat Nginx JVM)         分布式框架(并发编程 Zookeeper N ...

  6. 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》

    最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...

  7. 图灵学院java架构师vip课程第二期 完整版课程下载 无加密

    部分目录2020年新图灵学院Java二期架构师教程下载[课程目录]├──一.VIP课程:互联网工程专题├──二.VIP课程:源码框架专题├──三.VIP课程:并发编程专题├──四.VIP课程:性能调优 ...

  8. nexus搭建maven私服及私服jar包上传和下载

    nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1 ...

  9. eclipse 创建maven 项目 动态web工程完整示例 maven 整合springmvc整合mybatis

    接上一篇: eclipse 创建maven 项目 动态web工程完整示例 eclipse maven工程自动添加依赖设置 maven工程可以在线搜索依赖的jar包,还是非常方便的 但是有的时候可能还需 ...

随机推荐

  1. 为安卓手机刷上手机kali系统Nethunter

    kali Nethunter是一个装在手机上的kali,集成了kali的工具包,hid,无线攻击等等. 本文主要叙述如何安装此系统并正确的配置.不让你走弯路. 首先我们拒绝傻瓜安装软件 kali ne ...

  2. 如何发布composer包

    1. 首先要有github仓库(其中必须要有 composer.json 配置文件) 2.关联 github 项目 提交成功 3.设置钩子以便同步更新 https://packagist.org/ab ...

  3. c++存储区域

    来自:https://www.cnblogs.com/simonote/articles/3146038.html 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储 ...

  4. CNN算法详细分析

    test_example_CNN.m train_x = double(reshape(train_x',28,28,60000))/255; test_x = double(reshape(test ...

  5. java的浅拷贝和深拷贝(待解决)

    1.什么是浅拷贝,什么是深拷贝? 2.storm的并行度问题,需要使用全局变量static ConcorrentHashMap,因为加了static,所有的线程只能拷贝该全局变量的一个唯一的副本,进行 ...

  6. ROS学习笔记6-理解主题

    本文来源于:http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics ROS主题假设turtlesim节点已经运行,打开一个新终端,使用如下命令运行键 ...

  7. JetBrains IntelliJ IDEA(IJ)v2019.3.3/3.1/3.2/3.4/3.5 for mac/windows/linux 详细安装破解教程

    手欠升级了IntelliJ IDEA到2019.3.3,原来的破解不可用,IntelliJ IDEA 2019.3.3破解办法如下,为方便自己使用记录下.======================= ...

  8. SQL注入的原理及分析

    注入攻击的本质:将用户输入的数据当做代码执行. 有2个限制条件: 1.用户能够控制输入. 2.原本程序要执行的代码,拼接了用户输入的数据后进行执行. 定义:用户输入的数据被当做SQL语句执行. 以下面 ...

  9. ubuntu 系统分配固定 ip--

    由于Ubuntu重启之后,ip很容易改变,可以用以下方式固定ip地址 1.设置ip地址 vi /etc/network/interface # The loopback network interfa ...

  10. P1065 单身狗

    P1065 单身狗 转跳点: