Maven
Maven 的理解
- maven 定义了一系列运行的流程,也就生命周期,但是这些生命周期是抽象的
生命周期是抽象的理解
- maven的生命周期是抽象的,没有定义具体的逻辑,所有的逻辑都通过maven的插件来完成
- 假如将生命周期类比为你上班的一天
- 例如这一天中有一个流程是从家到公司(对应着生命周期中的一个周期),那么怎么去公司就是不确定的,你可以走路去公司,也可以坐地铁去公司,在maven中就将这个怎么去公司这件事交给了maven的插件,由他来具体定义具体的逻辑
- 所以总结的说就是,maven 由一连串的生命周期构成,每个生命周期干什么由maven插件来完成,记住是每一个生命周期
maven 插件
- 每一个生命周期都由插件来完成??
- 有的小伙伴就有疑问了,maven插件我知道,就是pom中一般放在最后的,由标签build,plugin包裹的,你说的所有的生命周期,我记得我就导入过几个插件啊,哪些clean这种生命周期,我没导入过插件啊???
- 这个其实是maven自己在一些生命周期上默认绑定了一些插件,因为这些插件是大家一般都会这么用的,要是我下载了你maven这个东西,连clean这么基础的动作,都要我,引入这个那个的插件岂不烦死了
- 下面是我单独跑clean,看看是不是插件在起作用
C:\Users\someo\Desktop\workTestJava\maevn-build-test>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< org.example:maevn-build-test >--------------------
[INFO] Building teetetete 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maevn-build-test ---
[INFO] Deleting C:\Users\someo\Desktop\workTestJava\maevn-build-test\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.499 s
[INFO] Finished at: 2021-07-15T10:29:43+08:00
[INFO] ------------------------------------------------------------------------
- 可以看到maven-clean-plugins:2.5 在起作用
maven 所有的生命周期
- Maven使用之生命周期和插件(五)_奔跑的蜗牛-CSDN博客
- 参考以上 blog
pom 中的resource到底怎么用的???
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.txt</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
-
directory 作用的目录
-
include 要输出的文件
-
filtering 对文件中的替换符是否要替换
-
以上配置解释就是我只将src/main/resources目录下以及子文件夹下的所有的后缀是txt的文件输出到target中,同时对文件中的替换文字进行替换
-
还有一种配置
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.txt</exclude>
</excludes>
<filtering>false</filtering>
</resource>
- 以上配置解释就是我将src/main/resources目录下以及子文件夹下的所有的后缀不是txt的文件输出到target中,同时不对文件中的替换文字进行替换
- 二者配合起来才是最终形态
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.txt</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.txt</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
- 我将src/main/resources下所有的文件都加入到target中,但是只对txt为后缀的文件进行替换文字
- 分步骤来
- 第一个配置会只输出txt的文件,同时处理替换文字
- 第二个配置会输出除了txt的文件,但不处理文字
- 二个一结合就是输出所有的文件,只处理txt后缀的替换文字
maven 的生命周期 和 maven 插件的目标 的关系
- 以 spring-boot-maven-plugin 插件为例子,此插件用于将jar,war包打成可以执行的jar,war包
- 之前我们说了maven生命周期的所有都是由插件来执行的,那我们怎么将生命周期和插件绑定呢
<plugin>
...
...
<executions>
<execution>
<id>随意名字</id>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- 一般导入的插件都是由这个结构来进行绑定的
- phase 就是maven对应的生命周期
- goal 就是 maven 插件对应的目标
- maven 插件的goal是什么???
- 当我们制作一个插件的时候,肯定是希望插件有多个功能,当插件后面跟的命令不同,执行相应的目标
- 就比如最常见的clean插件也有二个目标,每个目标对应不同的功能
- clean:clean
- clean:help
- 所以一个生命周期绑定一个插件的一个功能才是一一对应了
为什么有的插件啥都没写,只是引入了就知道绑定在了哪个生命周期上
- 其实就像maven的clean类似,他们这个插件被制作出来,默认就是有绑定的生命周期,不需要刻意指定
- 可以通过命令来查看
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:3.2.0 -Ddetail
>>>>
source:jar-no-fork
Description: This goal bundles all the sources into a jar archive. This
goal functions the same as the jar goal but does not fork the build and is
suitable for attaching to the build lifecycle.
Implementation: org.apache.maven.plugins.source.SourceJarNoForkMojo
Language: java
Bound to phase: package
Available parameters:
archive
The archive configuration to use. See Maven Archiver Reference.
Note: Since 3.0.0 the resulting archives contain a maven descriptor. If
you need to suppress the generation of the maven descriptor you can
simply achieve this by using the archiver configuration..
attach (Default: true)
User property: maven.source.attach
...
...
...
...
- Bound to phase: package 表示默认绑定到了package生命周期上