文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
1. 概要
- maven 是一款服务于 Java 平台的自动化构建工具。
- 使用 maven 的优点在于。
- 可以将一个项目拆分成多个工程。
- 可以将 jar 包保存在 " 仓库 " 中,不管在哪个项目只要使用引用即可。
- 可以使用统一的规范方式下载 jar 包。
- 所有的 jar 包都放在 " 仓库 " 中,所有的项目都使用仓库的一份 jar 包。
- 自动的将依赖的 jar 包导入。
2. 原理
2.1 安装
- 检查当前系统是否配置 JAVA_HOME 环境变量。
- 下载 maven,解压 maven 放置于一个非中文无空格的路径下。
- 配置 maven 相关环境变量。
- 在环境变量增加 M2_HOME,路径为 maven 解压后的根目录。
- 在环境变量里的 path 中增加 <maven>/bin 的目录。
- mvn -v 查看 maven 版本验证。
[root@compiler3x noarch]# mvn -v
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /root/software/apache-maven-3.5.3
Java version: 1.7.0_181, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181-2.6.14.8.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
2.2 仓库与坐标
-
pom.xml(Project Object Model)项目对象模型。
- 是 maven 的核心配置文件,所有的构建配置都在此文件中设置。
- 执行 maven 命令必须进入到 pom.xml 的目录中进行执行。
- maven 工程必须按照约定的目录结构创建。
.
├── pom.xml
└── src
└── main
├── java
└── resources
└── test
仓库
- 仓库可分为 本地仓库 和 远程仓库。
- 本地仓库的默认位置是 ~/.m2/repository。
- 远程仓库
- 可以搭建在局域网中,一般公司都会有私服,私服一般使用 nexus 搭建。
- 中央仓库架设在 Internet 上,像 springframework 就在中央仓库上。
- 也可以通过 settings.xml 配置文件配置本地仓库的路径。
<localRepository>/root/Java/repository</localRepository>
坐标
- 使用三个向量在仓库中唯一的定位一个 maven 工程。
- groupId(组 ID)、artifactId(ID)、version(版本)
- maven 坐标和仓库对应的映射关系
- [groupId]/[artifactId]/[version]/[artifactId]-[version].jar
- 例如:~/.m2/repository/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3.jar
2.3 依赖
- maven 解析依赖信息时会先到本地仓库中取查找被依赖的 jar 包。
- 如果本地仓库中没有的 jar 包,会到中央仓库中查找,获取后下载到本地仓库。
- 中央仓库中也找不到依赖的 jar 包,则编译失败。
- 如果依赖的是自己或者团队开发的 maven 工程,需要先使用 install 命令把被依赖的 mave n工程的 jar 包导入到本地仓库中。
依赖范围
- 在 POM 4 中,<dependency> 中引入了 <scope>,它主要管理依赖的部署。
范围 | 说明 |
---|---|
compile | 编译范围,默认值,如果没有提供一个范围,那依赖的范围就是编译范围。编译范围依赖在所有的 classpath 中可用,适用于所有阶段(开发、测试、部署、运行),jar 包会一直存在于所有阶段。 |
provided | 已提供范围,依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用。已提供范围的依赖在编译 classpath (不是运行时)可用。它们不是传递性的,也不会被打包。只在开发、测试阶段使用,目的在于不让 Servlet 容器和本地仓库的 jar 包冲突 。例如 servlet.jar。 |
runtime | 运行时范围,依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如在编译的时候只需要 JDBC api jar,而只有在运行的时候才需要 JDBC 驱动实现。 |
test | 测试范围,在一般的编译和运行时都不需要,只有在测试编译和测试运行阶段可用。不会随项目发布。 |
system | 系统范围,类似 provided,必须显式的提供一个对于本地系统中 jar 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。maven 不会在 Repository 中查找它。如果将一个依赖范围设置成系统范围,必须同时提供一个 systemPath 元素。 |
依赖的传递性
- pom.xml 文件配置好依赖关系后,必须首先 mvn install 后,依赖的 jar 包才能使用。
- 非 compile 范围 的依赖是不能传递的。
- 因为 MavenProject2 和 MavenProjectDemo 依赖 MavenProject1,因此可以直接使用 spring-core.jar 包。
依赖版本的原则
- 路径最短者优先原则。
- MavenProjectDemo 路径最短依赖为 MavenProject2,因此 Log4j 版本为 1.2.7。
- 路径相同先声明优先原则。
- MavenProjectDemo 的 pom.xml 文件中,先声明的依赖,就使用该版本。
统一管理依赖的版本
- 为了统一管理版本号,可以使用 properties 标签,里面可以自定义版本的标签名。
- 在使用的地方使用 ${自定义标签名}。
2.4 生命周期
- maven 有 三套 相互独立 的生命周期。
- 构建的生命周期由阶段组成。
- 每个生命周期都由一些不同的构建阶段组成。每个构建阶段都是生命周期的一个步骤。
- 这些构建周期的各个步骤是用来顺序执行,以便完成生命周期。
Clean Lifecycle
- 在进行真正的构建之前进行一些清理工作。
- Clean 生命周期一共包含了三个阶段。
阶段 | 说明 | 插件的目标 |
---|---|---|
pre-clean | 执行一些需要在 clean 之前完成的工作。 | |
clean | 移除所有上一次构建生成的文件。 | maven-clean-plugin:clean |
post-clean | 执行一些需要在 clean 之后立刻完成的工作。 |
<phases>
<phase>pre-clean</phase>
<phase>clean</phase>
<phase>post-clean</phase>
</phases>
<default-phases>
<clean>
org.apache.maven.plugins:maven-clean-plugin:2.5:clean
</clean>
</default-phases>
Default Lifecycle
- 构建的核心部分,编译,测试,打包,部署等等。
阶段 | 说明 | 插件的目标 |
---|---|---|
validate | 验证,验证项目是否正确,并且所有必要的信息是否有效。 | |
initialize | 初始化,初始化生成状态,例如设置属性或创建目录。 | |
generate-sources | 生成源,生成任何要包含在编译中的源代码。 | |
process-sources | 处理源代码,处理源代码,例如过滤任何值。 | |
generate-resources | 生成资源,生成要包含在包中的资源。 | |
process-resources | 复制并处理资源文件,至目标目录,准备打包。 | maven-resources-plugin:resources |
compile | 编译项目的源代码。 | maven-compiler-plugin:compile |
process-classes | 进程类,从编译后处理生成的文件,例如在 Java 类上做字节码增强。 | |
generate-test-sources | 生成测试源,生成任何要包含在编译中的测试源代码。 | |
process-test-sources | 处理测试源,处理测试源代码,例如过滤任何值。 | |
generate-test-resources | 生成测试资源,为测试创建资源。 | |
process-test-resources | 复制并处理资源文件,至目标测试目录。 | maven-resources-plugin:testResources |
test-compile | 编译测试源代码。 | maven-compiler-plugin:testCompile |
process-test-classes | 过程测试类,在测试编译后处理生成的文件,例如在 Java 类上做字节码增强。适用于 Maven 2.0.5 及以上。 | |
test | 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 | maven-surefire-plugin:test |
prepare-package | 准备包装,在实际包装之前,执行准备包装所需的任何操作。这通常会导致包的解包、处理版本。适用于 Maven 2.1 及以上。 | |
package | 接受编译好的代码,打包成可发布的格式,如 jar。 | maven-jar-plugin:jar |
pre-integration-test | 预集成测试,在执行集成测试之前执行所需的操作。这可能涉及到诸如设置所需环境之类的事情。 | |
integration-test | 集成测试,在可以运行集成测试的环境中处理和部署包(如果需要)。 | |
post-integration-test | 集成后测试,执行集成测试后执行所需的操作。这可能包括清理环境。 | |
verify | 运行集成测试,以确保项目符合质量标准。 | |
install | 将包安装至本地仓库,用于让其它项目依赖。 | maven-install-plugin:install |
deploy | 将最终的包复制到远程的仓库,用以让其他开发人员与项目共享。 | maven-deploy-plugin:deploy |
<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>process-test-classes</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
- 不论需要执行该生命周期的哪一个阶段,maven 都会从这个生命周期的开始进行执行。
Site Lifecycle
- 生成项目报告,站点,发布站点。
阶段 | 说明 | 插件的目标 |
---|---|---|
pre-site | 执行一些需要在生成站点文档之前完成的工作。 | |
site | 生成项目的站点文档。 | maven-site-plugin:site |
post-site | 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。 | |
site-deploy | 将生成的站点文档部署到特定的服务器上。 | maven-site-plugin:deploy |
<phases>
<phase>pre-site</phase>
<phase>site</phase>
<phase>post-site</phase>
<phase>site-deploy</phase>
</phases>
<default-phases>
<site>
org.apache.maven.plugins:maven-site-plugin:3.3:site
</site>
<site-deploy>
org.apache.maven.plugins:maven-site-plugin:3.3:deploy
</site-deploy>
</default-phases>
2.5 构建
- 每个阶段都会有插件(plugin),插件的职责就是执行对应的命令。
- 一个构建的过程是由很多的 插件的目标 组成(这些插件的目标可以属于不同的插件)。
- 一个插件有可能有多个功能、每个功能就是一个目标。
- 比如 maven-dependency-plugin 有十多个目标、每个目标对应了一个功能。插件的目标为 dependency:analyze、dependency:tree 和 dependency:list。
- 通用写法、冒号前面是插件前缀、冒号后面是插件的目标。比如 compiler:compile。
- 在 maven 2.0.5 及之上版本,一个构建阶段的多个目标的执行顺序,是和这些目标在 pom 中声明的顺序一致的。但是,多个相同的插件是不允许的。
- 在 maven 2.0.11 及以上版本,要是定义了多个相同插件,它们会被分组并且一起执行。
- 如果一个构建阶段没有目标绑定,那么这个构建阶段就不会执行。但是一旦有一个或者多个目标绑定,它就会执行这些目标。
- clean 和 package 是 构建过程,dependency:copy-dependencies 是一个 插件的目标。
- 一个插件有可能有多个功能、每个功能就是一个目标。
- 一个插件的目标可以被绑定在零个或者多个构建过程上。
- 没有被绑定在任何构建过程的目标也可以被直接调用。
- 如果一个目标绑定在一个或者多个构建阶段,这个目标会被所有构建阶段调用。
- 一些由复合词(pre-, post-, process-*)组成的构建阶段通常不会由命令行直接调用。这些构建过程连接整个构建流程,产生不被外部使用的中间结果。例如故障保护和代码覆盖插件绑定目标在 integration-test 和 verify 阶段。最终的结果就是在 verify 阶段之后生成可用的测试和代码覆盖率报告。
- 如果 integration-test 由命令行调用,就不会生成任何的报告。
- 整个环境会停留在悬挂状态,maven 不会自己终止。
- 构建过程 1 由目标 A1 组成。
- 构建过程 2 由目标 A2 和 B1 组成。
- 目标 B2 可以被直接调用。
- 构建过程 n 不会执行。
2.5.1 Packaging 的内置生命周期绑定目标
- 通过 pom 中的元素可以为项目设置打包方式。
- 可用的打包值为 ejb、ejb3、jar、par、rar 、war、pom、ear、maven-plugin。
- 如果没有设置 packaging 的值,默认为 jar。
- 依赖 packaging 值不同有不同的目标,每种 packaging 会由一些特定的目标绑定在特定的任务中。
ejb / ejb3 / jar / par / rar / war
阶段 | 插件的目标 |
---|---|
process-resources | resources:resources |
compile | compiler:compile |
process-test-resources | resources:testResources |
test-compile | compiler:testCompile |
test | surefire:test |
package | ejb:ejb / ejb3:ejb3 / jar:jar / par:par / rar:rar / war:war |
install | install:install |
deploy | deploy:deploy |
<phases>
<process-resources>
org.apache.maven.plugins:maven-resources-plugin:2.6:resources
</process-resources>
<compile>
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
</compile>
<process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
</process-test-resources>
<test-compile>
org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
</test-compile>
<test>
org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
</test>
<package>
org.apache.maven.plugins:maven-jar-plugin:2.4:jar
</package>
<install>
org.apache.maven.plugins:maven-install-plugin:2.4:install
</install>
<deploy>
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
</deploy>
</phases>
pom(纯元项目的打包方式)
阶段 | 插件的目标 |
---|---|
package | site:attath-descriptor |
install | install:install |
deploy | deploy:deploy |
<phases>
<install>
org.apache.maven.plugins:maven-install-plugin:2.4:install
</install>
<deploy>
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
</deploy>
</phases>
ear
阶段 | 插件的目标 |
---|---|
generate-resources | ear:generate-application-xml |
process-resources | resources:resources |
package | ear:ear |
install | install:install |
deploy | deploy:deploy |
<phases>
<generate-resources>
org.apache.maven.plugins:maven-ear-plugin:2.8:generate-application-xml
</generate-resources>
<process-resources>
org.apache.maven.plugins:maven-resources-plugin:2.6:resources
</process-resources>
<package>
org.apache.maven.plugins:maven-ear-plugin:2.8:ear
</package>
<install>
org.apache.maven.plugins:maven-install-plugin:2.4:install
</install>
<deploy>
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
</deploy>
</phases>
maven-plugin
阶段 | 插件的目标 |
---|---|
generate-resources | plugin:descriptor |
process-resources | resources:resources |
compile | compiler:compile |
process-test-resources | resources:testResources |
test-compile | compiler:testCompile |
test | surefire:test |
package | jar:jar and plugin:addPluginArtifactMetadata |
install | install:install |
deploy | deploy:deploy |
<phases>
<process-resources>
org.apache.maven.plugins:maven-resources-plugin:2.6:resources
</process-resources>
<compile>
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
</compile>
<process-classes>
org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor
</process-classes>
<process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
</process-test-resources>
<test-compile>
org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
</test-compile>
<test>
org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
</test>
<package>
org.apache.maven.plugins:maven-jar-plugin:2.4:jar,
org.apache.maven.plugins:maven-plugin-plugin:3.2:addPluginArtifactMetadata
</package>
<install>
org.apache.maven.plugins:maven-install-plugin:2.4:install
</install>
<deploy>
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
</deploy>
</phases>
- 完整的 maven 生命周期是在 maven-core 模块的 components.xml 文件中定义,相关查看 文档。
- maven 2.x 中,默认的生命周期绑定的目标描述是在 components.xml。
- maven 3.x 中,单独的 default-bindings.xml 文件中配置。
2.6 Plugin
- 把目标增加到构建阶段的方法是在项目中配置插件,插件就是提供目标给 maven 项目。
- 而自定义绑定允许自己掌控插件目标与生命周期的结合。
...
<plugin>
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-maven-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<configuration>
<models>
<model>src/main/mdo/maven.mdo</model>
</models>
<version>4.0.0</version>
</configuration>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
</plugin>
...
- modello 插件会将 modello:java 目标绑定到 generate-source 阶段(modello:java 目标会生成 java 代码)。所以使用 modello 插件并且让它生成代码并且将代码加入到 build 阶段。
- 每个 excuteion 可以配置一个唯一的 ID,在继承或者应用权限阶段,可以控制是否合并目标配置文件,还是作为一个额外的执行,这样就可以根据不同的配置文件执行多次相同的目标。
- 当多个 executions 被配置给一个单独的过程,会按照 pom 中配置的顺序执行。
2.6.1 插件配置
- 几乎所有 maven 插件的目标都有一些可配置的参数,可以通过命令行和 pom 配置等方式来配置这些参数。
命令行插件配置
- 很多插件目标的参数都支持从命令行配置,用户可以在 maven 命令中使用 -D 参数,并伴随一个 <参数键 = 参数值> 的形式,来配置插件目标的参数。
- 例如 maven-surefire-plugin 提供 maven.test.skip 参数,当其值为 true 时,跳过执行测试。
[root@localhost ~]# mvn install -Dmaven.test.skip=true
- 参数 -D 是 Java 自带的,其功能是通过命令行设置一个 Java 系统属性,maven 简单的重用了该参数,在准备插件的时候检查系统属性,便实现了插件参数的配置。
pom 中插件全局配置
- 并不是所有的插件参数都适合从命令行配置,有些参数的值从项目创建到项目发布都不会改变,或者说很少改变,对于这种情况,在 pom 文件中一次性配置更方便。
- 例如,需要配置 maven-compiler-plugin 告诉其编译 Java 1.5 版本的源文件,生成与 Java 虚拟机 1.5 兼容的字节码文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
- 这样,不管绑定到 compile 阶段的 maven-compiler-plugin:compile 任务,还是绑定到 test-compiler 阶段的 maven-compiler-plugin:testCompiler 任务,就都能够使用该配置。
pom 中插件任务配置
- 也可以为某个插件配置特定的参数。
- 以 maven-antrun-plugin 为例,它有一个目标 run,可以用来在 maven 中调用 Ant 任务。用户将 maven-antrun-plugin:run 绑定到多个生命周期阶段上,再加上不同的配置,可以让 maven 在不同的生命阶段执行不同的任务。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>ant-validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>I'm bound to validate phase.</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>ant-verify</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>I'm bound to verify phase.</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 上述插件配置绑定到了 validate 和 verify 阶段。
- 局部配置的 <configuration> 标签(tag)放在 <execution> 标签(tag)里边,而全局配置的 <configuration> 标签(tag)则放在 <plugin> 标签(tag)里边,因为全局配置里根本就没有 <execution> 标签(tag),因为全局配置针对的是该插件的全部目标(goal)配置的。
2.6.2 常用插件
编译插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
参数 | 说明 |
---|---|
source | 源代码编译版本。 |
target | 目标平台编译版本。 |
encoding | 字符集编码。 |
设置资源文件的编码方式
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
参数 | 说明 |
---|---|
phase | 绑定到 compile 阶段。 |
encoding | 设置编码方式。 |
自动拷贝 jar 包到 target 目录
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}为 maven 内置变量,缺省为 target -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
参数 | 说明 |
---|---|
outputDirectory | target 目录。 |
excludeTransitive | 表示是否不包含间接依赖的包。 |
stripVersion | 表示复制的 jar 文件去掉版本信息。 |
- 在部署 war 包时,需要将项目依赖的 jar 包,也打到 war 包中,因此会用到上述插件。
生成源代码 jar 包
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- <finalName>${project.build.name}</finalName> -->
<attach>true</attach>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
参数 | 说明 |
---|---|
phase | 绑定到 compile 阶段。 |
attach | 指定是否将项目附加到项目。 |
encoding | 设置编码方式。 |
将项目打成 jar 包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 当用户使用 lib命令执行JAR文件时,使用该元素定义将要执行的类名 -->
<mainClass>com.demo.test.Test</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
参数 | 说明 |
---|---|
addClasspath | 告知 maven-jar-plugin 添加一个 Class-Path 元素到 MANIFEST.MF 文件,以及在 Class-Path 元素中包括所有依赖项 。 |
classpathPrefix | 所有的依赖项应该位于 lib 文件夹。 |
mainClass | 当用户使用 lib 命令执行 jar 文件时,使用该元素定义将要执行的类名。 |
- 将项目打成 jar 包时,有时会需要将项目打成可以直接运行的 jar 包,因此就需要将项目依赖的 jar 包也打入 jar 包中。
将项目打成 war 包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<!-- <warName>${project.build.name}</warName> -->
</configuration>
</plugin>
参数 | 说明 |
---|---|
encoding | 强制字符集编码。 |
warName | war 包名称。 |
webappDirectory | 产生 war 前,用于存放构建 war 包的目录。 |
打包时清空一些指定目录
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<filesets>
<fileset>
<directory>c:/test</directory>
</fileset>
</filesets>
</configuration>
</plugin>
插件检查不通过,人为忽略
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<!-- 忽略 2.0 以上版本的 maven-dependency-plugin 的检查 -->
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.0,)</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
参考资料
https://www.cnblogs.com/yjf512/p/7449728.html
https://blog.csdn.net/zhaojianting/article/details/80321488
网友评论