maven学习笔记--常用插件(plugins)和目标(goals)

2023-11-13

Maven 的核心其实不做什么实际的事情,除了解析一些 XML 文档,管理生命周期与插件之外。Maven 被设计成将主要的职责委派给一组 Maven 插件,这些插件可以影响 Maven 生命周期,提供对目标的访问。绝大多数 Maven 的动作发生于Maven 插件的目标,如编译源码,打包二进制代码,发布站点和其它构建任务。

一个Maven插件是一个单个或多个目标的集合,Maven插件的例子有一些简单但核心的插件,像Jar插件它包含了一组创建JAR文件的目标,Compiler插件,它包含了一组编译源代码和测试代码的目标,或者Surefire插件,它包含一组运行单元测试和生成测试报告的目标。

一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行,目标的例子包括Compiler插件中的目标,它用来编译项目中的所有目标,用来运行单元测试。目标通过配置属性进行配置,以用来定制行为。例如,Compiler插件的compile目标定义了一组配置参数,它们允许你设置目标JDK版本或者选择是否用编译优化。

1. help插件

你需要一个工具来帮助你理解一些Maven使用的模型,以及某个插件有什么可用的目标。Maven Help插件能让你列出活动的Maven Profile,显示一个实际POM(effective POM),打印实际settings(effective settings),或者列出Maven插件的属性。  Maven Help 插件有四个目标。前三个目标是—— active-profiles, effective-pom 和effective-settings —— 描述一个特定的项目,它们必须在项目的目录下运行。 最后一个目标—— describe ——相对比较复杂,展示某个插件或者插件目标的相关信息。
help:active-profiles 列出当前构建中活动的Profile(项目的,用户的,全局的)。

help:effective-pom 显示当前构建的实际POM,包含活动的Profile。

help:effective-settings 打印出项目的实际settings, 包括从全局的settings和用户级别settings继承的配置。

help:describe 描述插件的属性。它不需要在项目目录下运行。但是你必须提供你想要描述插件的 groupId 和 artifactId。
当你开始使用Maven。

你会试图获得Maven插件的信息:插件如何工作?配置参数是什么?目标是什么? 你会经常使用 help:describe 目标来获取这些信息。通过 plugin 参数你可以指定你想要研究哪个插件,你可以传入插件的前缀(如help 插件就是 maven-help-plugin),或者可以是 groupId:artifact[:version]这里 version 是可选的。

比如, 下面的命令使用 help 插件的目标来输出Maven Help 插件的信息。

mvn help:describe -Dplugin=help

通过设置plugin参数来运行describe目标,输出为该插件的Maven坐标,目标前缀,和该插件的一个简要介绍。如果你想要 Help 插件输出完整的带有参数的目标列表,只要运行带有参数full的help:describe 目标就可以了,

mvn help:describe -Dplugin=help -Dfull
该选项能让你查看插件所有的目标及相关参数。但是有时候这些信息显得太多了。这时候你可以获取单个目标的信息,设置 mojo 参数和参数。下面的命令列出了Compiler 插件的compile目标的所有信息(在maven里一个插件目标也被认为是一个mojo)

mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

2. archetype插件

3. exec插件

exec 插件允许你运行 Java 类和其它脚本。 它不是 Maven 核心插件,但它可以从Codehaus3 的 Mojo4 项目得到。想要查看 Exec 插件的完整描述,运行:mvn help:describe -Dplugin=exec -Dfull

这会列出所有 Maven Exec 插件可用的目标。 Help 插件同时也会列出 Exec 插件的有效参数,如果你想要定制 Exec 插件的行为,传入命令行参数,你应该使用help:describe 提供的文档作为指南。

 Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序。 在任何其它的构建系统能够中,我们必须复制所有程序依赖到类似于 lib/ 的目录,这个目录包含一个 JAR 文件的集合。

4. dependency插件

maven Dependency 插件来打印出已解决依赖的列表。
mvn dependency:analyze
mvn dependency:resolve
将会打印出最终的你项目编译所基于的所有依赖的组合
mvn dependency:tree 
将打印项目的整个依赖树想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,
打开 Maven 的调试标记运行mvn install -X
有一个目标比较有用,就是将maven项目的依赖jar到出来:
mvn dependency:copy-dependencies
a. 导出到默认目录 targed/dependency     
从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下, 执行如下命令:
mvn dependency:copy-dependencies
或在eclipse中,选择项目的pom.xml文件, 点击右键菜单中的Run As,见下图红框中,在弹出的Configuration窗口中,
输入 dependency:copy-dependencies 后,点击运行   
maven项目所依赖的jar包会导出到targed/dependency目录中。
b.导出到自定义目录中
在maven项目下创建lib文件夹,输入以下命令:即可将maven项目所依赖的jar包都会复制到项目目录下的lib目录下
mvn dependency:copy-dependencies -DoutputDirectory=lib
同时 置依赖级别,通常使用compile级别
mvn dependency:copy-dependencies -DoutputDirectory=lib   -DincludeScope=compile

5. surefire插件 

Maven Surefire 插件有一个 test 目标,该目标被绑定在了 test 阶段。 
test 目标执行项目中所有能在 src/test/java 找到的并且文件名与 **/Test*.java, **/*Test.java 匹配的所有单元测试 ,
在 Maven Surefire 插件执行 JUnit 测试的时候,它同时也在 /target/surefire-reports 
目录下生成 XML 和常规文本报告。 
如果你的测试失败了,你可以去查看这个目录,里面有你单元测试生成的异常堆栈信息和错误信息。
当Maven 遇到一个测试失败,它默认的行为是停止当前的构建。 如果你希望继续构建项目,即使 Surefire 插件
遇到了失败的单元测试,你就需要设置 Surefire 的testFailureIgnore 这个配置属性为 true。
<project>
	[...]
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<testFailureIgnore>true</testFailureIgnore>
				</configuration>
			</plugin>
		</plugins>
	</build>
	[...]
</project>
这个表达式可以从命令行通过 -D 参数设置。mvn test -Dmaven.test.failure.ignore=true
Maven 提供了跳过单元测试的能力,只需要使用 Surefire 插件的 skip 参数。 在命令行,只要简单的给任何目标添加
maven.test.skip 属性就能跳过测试:mvn install -Dmaven.test.skip=true
另一种配置 Maven 跳过单元测试的方法是给你项目的 pom.xml 添加这个配置
<project>
	[...]
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>
	[...]
</project>

6. assembly插件

Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件。 你可以使用 Maven Assembly 插件

以你希望的任何形式来装配输出,只需定义一个自定义的装配描述符,即可生成一个可分发的JAR文件,该文件包含

了项目的二进制文件和所有的依赖。

要配置 Maven Assembly 插件, 需要在 pom.xml 中的build 配置中添加如下的 plugin 配置。如下图所示

<project>
	[...]
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
				</configuration>
			</plugin>
		</plugins>
	</build>
	[...]
</project>
添加好这些配置以后,你可以通过运行 mvn assembly:assembly来构建这个装配。 将工程依赖的jar包和工程都打成一个jar打包

在 target/***-1.0-jar-with-dependencies.jar 装配好之后, 我们可以在命令行重新运行 Main 类

java -cp **-1.0-jar-with-dependencies.jar *.*.Main

7. jetty插件

8. tomcat插件

9. source插件

10. compiler插件

用于编译源代码,默认在compile阶段被调用。两个goal,compiler:compile/compiler:testCompile

windows平台默认使用GBK编码,如果工程编码为utf8,也需要在compiler插件中指出,否则按GBK编码,也会出问题

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.3</version>
    <configuration>
        <!--源码的Java版本-->
        <source>1.7</source>
        <!--运行环境的Java版本-->
        <target>1.7</target>
	<encoding>UTF8</encoding>
    </configuration>
</plugin>

11、Resource插件

<filters>
			<filter>${user.home}/asssd.properties</filter>
		</filters>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>**/*</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**.xml</include>
				</includes>
			</resource>
		</resources>
运行打包命令时,将src/main/resources中的所有文件和src/main/java目录下的所有.xml文件打到jar包中。
其中filters过滤器的作用是将所有引用文件中的${变量名称},替换成antx.properties文件中的变量值。要使用过滤器时,首先需要设置过滤器:
<filters>    
       <filter>${user.home}/antx.properties</filter>
</filters>
然后再启动过滤器, true需要过滤,false不需要过滤:
<filtering>true</filtering>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maven学习笔记--常用插件(plugins)和目标(goals) 的相关文章

随机推荐

  • linux驱动调试--段错误之栈信息分析

    转自 http blog chinaunix net xmlrpc php r blog article uid 29401328 id 4923529 接着上一篇来分析一下Oops的栈 s3c2440平台 关于调试源码和整个Oops信息请
  • LeetCode-1318. Minimum Flips to Make a OR b Equal to c

    Given 3 positives numbers a b and c Return the minimum flips required in some bits of a and b to make a OR b c bitwise O
  • 图像清晰度评价指标(Python)

    最近在毕业设计中涉及了有关增强图像清晰度的实验 需要一些指标来进行实验结果的评估 刚好网上有个总结的非常好的博客 见参考文献 1 但没有实现方法 因此 我将在我的博客中用Python实现 评估方法实现 所有函数的具体说明都在参考文献 1 里
  • QMap和QHash类

    QMap和QHash具有非常相似的功能 它们的差别仅在于 1 QHash具有比QMap更快的查找速度 2 QHash以任意的顺序存储数据项 而QMap总是按照键 key的顺序存储数据 3 QHash的键类型 Key必须提供operator
  • Softmax分类和两层神经网络以及反向传播的代码推导

    发现草稿箱里还有一篇很早之前的学习笔记 希望可以帮助到有需要的童鞋 目录 序 Softmax分类器 反向传播 数据构建以及网络训练 交叉验证参数优化 序 原来都是用的c 学习的传统图像分割算法 主要学习聚类分割 水平集 图割 欢迎一起讨论学
  • python随机大小写字符串_python 随机产生特定类型字符的函数(大写、小写、数字)...

    1 创建一个 Randomcharacter py 文件 作为模块文件供测试或实现程序调用 内容如下 from random import randint generate a random character between ch1 an
  • 基于51单片机 数控恒流源设计 可调电流源

    设计硬件组成 基于51单片机 数控恒流源设计 可调电流源基于单片机可调电流源设计 项目定制觉得选题不错 分享一下 由51单片机 LCD1602液晶 变压器 整流桥 开关电源LM2596 TLC5615 LM358 TIP31C 按键 TL4
  • ThinkPhp6+Vue前后端分离系统案例

    项目介绍 一款 PHP 语言基于ThinkPhp6 Vue ElementUI等框架精心打造的一款模块化 插件化 高性能的前后端分离架构敏捷开发框架 可用于快速搭建前后端分离后台管理系统 本着简化开发 提升开发效率的初衷 目前框架已集成了完
  • 秒杀linux下系统调用fork()面试题

    秒杀linux下系统调用fork 面试题 第一道题 在之前博客也写过这道题 http blog csdn net chdhust article details 8535915 题目 请问下面的程序一共输出多少个 1 2 3 4 5 6
  • 华为前副总裁李玉琢:华为无法培养出企业家

    1995年我刚进入华为不久 有人问我四通与华为的区别时 我脱口而出 四通能培养企业家而华为不能 这一点从任正非迟迟无法找到自己的 替手 就可见一斑 曾国藩说 做大事者 以寻找替手为第一要义 任正非也并非不知道这些道理 但是他的某些意识以及管
  • vscode配置C/C++环境(Windows)

    1 总体流程 2 下载CodeBlocks 下载该CodeBlocks的主要目的是为了使用其自带的MinGW 对于初学者在配置环境这步会少遇到一些坑 下载网址 http www codeblocks org downloads binari
  • 2017校园招聘腾讯笔试题 在线编程题

    2 二分查找 90 90 如果输入80 80 在0到90之间 记为1 继续二分 80在 45 90 之间 记为1 最后应该输出为111100 则输出111100 Java代码如下 import java util Scanner publi
  • SSM 使用C3P0 数据库连接池 提示如下错误信息:Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z

    产生上述问题的原因是 c3p0 jar版本过低 我用的是 c3p0 0 9 1 2 jar 解决办法 c3p0 0 9 1 2 jar 换成 c3p0 0 9 5 2 jar
  • 路由器、交换机、猫(Modem)、LAN、WAN、WLAN、VLAN基本概念

    电脑之间是通过TCP IP协议进行说话的 不同电脑之间准确的找到对方是通过IP地址实现的 不在同一个网络的电脑信息交互是通过网关来实现的 网关就是一个公网地址 由运营商下发的 DHCP服务器下发IP地址 通过DHCP服务端口UDP67和UD
  • 手机屏幕显示正常但是触摸有一部分出问题,是内屏坏了吗?保修期内手机该不该走官方售后?

    这个问题我亲身经历 我现在人就在华为官方售后 根据手机城小哥的说法 现在手机触摸和显示都是一体的 所以如果出现触摸有问题 内屏或者排线等甚至主板都有可能出问题 保修期内手机建议走官方售后 因为有可能不只是屏幕坏了 保修可以同时检查你手机的主
  • 2020-12-24如何在QT中增加函数

    关于如何在QT软件中增加函数的问题 比如在VS中可以这样增加函数 但是在QT中右键并不能如上图一样有这个ADD Member Function 所以应该怎么加呢 如下图所示 1 首先在对应头文件中增加函数声明 如图蓝色区域代码 2 在Sav
  • 关于inet_addr() 函数

    inet addr 将一个字符串格式的ip地址转换成一个uint32 t数字格式 但是需要注意的是 这个函数的返回值在大小端机器上是不同的 例如输入一个 192 168 0 1 的字符串 在内存中的排列 字节从低到高 0xC0 0xA8 0
  • 彻底搞清“SVM”

    文章目录 前言 一 SVM是什么 概述 二 线性SVM 2 1 决策面 方程 2 2 约束条件 以下可以证明 有约束条件和没约束条件的公式是一样的 2 3 线性SVM优化 三 非线性分类 3 1 核函数 总结 前言 分类分析 概念 通过构造
  • 3D点云重建原理及Pytorch实现

    3D点云重建原理及Pytorch实现 Pytorch Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruction 一种Pytorch实现方法 学习
  • maven学习笔记--常用插件(plugins)和目标(goals)

    Maven 的核心其实不做什么实际的事情 除了解析一些 XML 文档 管理生命周期与插件之外 Maven 被设计成将主要的职责委派给一组 Maven 插件 这些插件可以影响 Maven 生命周期 提供对目标的访问 绝大多数 Maven 的动