maven中的scope
这个scope,就像是 写java注解时的 @Retention(xxx) 的那个感觉,大约是一种 “生命周期”的感觉。
能体会到,理解到这个意思,基本上就够了。具体只是生效到哪个阶段而已。
1、compile
:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。
2、test
:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。
3、runtime
:该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。
4、provided
:该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作。
5、system
:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径(因为版权原因并不是所有依赖都从中央仓库下载的)
6、import
: 一个dependencyManagement中的dependency,如果scope是import
形式的,那么这个dependency不参与依赖传递。只是把dependency需要的依赖都取过来,像个占位符
一样替换了就行。
以下为scope是system时举的例子:
例:有一个dm.jar在${basedir}/src/main/resources/lib目录下:
<dependency>
<groupId>dm</groupId>
<artifactId>dm</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}/src/main/resources/lib/dm.jar</systemPath>
</dependency>
如果是打包war包,并且打包完成后需要把本地的${basedir}/src/main/resources/lib/dm.jar和线上下载的依赖整合到一个目录的话,就还需要做如下配置:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<!--把本地lib里面的jar复制到lib-->
<directory>src/main/resources/lib</directory>
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
更多标签参考
pom.xml文件里
<packaging>pom</packaging>的作用
- 顶级的,
<packaging>pom</packaging>
是什么? -
<dependency>
节点里,<packaging>
pom</packaging>
是什么?
重头戏,<type>
pom</type>
怎么理解?
我们从maven仓库下载下来的依赖有的是只有pom文件没有jar包的,这时候如果需要依赖这个pom文件就需要写
<type>
pom</type>
上图一红一绿两条线,说了两件事。
红线的可以解释<type>
里的值是什么意思。
绿线里的可以解释为什么有些时候<dependency>
里面的<type>
有时候不用加,有时候不加却报错加了就不报错(即通常为了获取继承来的pom.xml
里面的<properties>
里的各种包的版本号之类的信息,没有的话就不能确定版本,当然报错)。
例子: maven pom 文件中 dependence 的 type 为 pom 是什么意思?
在 Maven 的 pom 文件中,dependence 节点用于声明对其他项目的依赖。如果 dependence 的 type 属性设置为 “pom”,则意味着你依赖的是另一个项目的 pom 文件,而不是实际的项目的编译后的代码或者二进制文件。
这种情况通常出现在你希望继承另一个项目的配置信息,而不需要实际依赖该项目的代码时。例如,你可能希望将你的项目与另一个项目使用相同的依赖版本,或者使用相同的插件配置。在这种情况下,你可以在自己的 pom 文件中声明对另一个项目的 pom 文件的依赖,并在自己的 pom 文件中继承该项目的配置信息
<project>
<!-- 省略其他信息 -->
<dependencies>
<!-- 依赖另一个项目的 pom 文件 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>other-project</artifactId>
<version>1.0</version>
<type>pom</type>
</dependency>
</dependencies>
</project>
在这个例子中,你的项目会依赖另一个项目的 pom 文件,但不会依赖另一个项目的代码。
build里的resource标签
resources
中的*
与 **/*
区别
-
\*
指resource路径下,并不包含resource子文件夹下的文件 -
**/*
指resource路径及其子路径下所有文件
- include、exclude可以配置多个路径,但路径不要重复,也别包含
include说明:打包时只保留include标签下的文件
include 的<filtering>
说明:
- true:可以规定指定路径下的xml包括properties文件在编译期,将文件指定的${key}替换掉;
- 例如: 中我们使用
${jdbc.url}
来代表数据库地址。那么在Maven编译时,就会将${jdbc.url}替换成真正的地址。 - false:不替换
- 例如: 中我们使用
exclude说明: exclude规定路径下的文件不被打包
exclude 的<filtering>
说明
- true: 不在exclude规定路径下,其他的文件由include决定
- false: 不在exclude规定路径下,其他的文件不由include决定
include 、exclude二者可以配合使用,划定打包范围
默认情况下,maven打包会将资源目录(一般是src/main/resources
)中的资源文件打包进去,而如果在pom.xml
中配置了resources
标签,则默认的资源打包策略就被覆盖掉了,只会打包resources
标签中配置的资源文件**
基本结构:
<build>
<resources>
<resource>
<directory>src/main/resource</directory>
<includes>
<include>...</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
...
</resource>
</resources>
<build>
案例:
<build>
<resources>
<!-- 案例 1. 打包时只留下Java目录以及子目录下 .txt类型文件 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.txt</include>
</includes>
</resource>
<!-- 案例 2 保留 resources 下所有资源,不配置默认就是保存所有 -->
<!-- 案例 2.1 打包时留下resource目录以及子目录下所有文件 -->
<resource>
<directory>src/main/resources</directory>
</resource>
<!-- 案例 2.2 打包时留下resource目录以及子目录下所有文件,同案例二效果 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
<include>**/*</include>
</includes>
</resource>
<!-- 案例 3. 打包时只留下resource目录以及子目录下的.yml文件 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
<!-- 案例 4. 打包时除了resource目录以及子目录下的.yml文件,其他文件都会保留下来 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.yml</exclude>
</excludes>
</resource>
</resources>
</build>
maven的打包类型
pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。
项目的打包类型:
<packaging>
pom</packaging>
<packaging>
jar</packaging>
<packaging>
war</packaging>
packing默认是jar类型,
- pom ---------> 父类型都为pom类型
- jar ---------> 内部调用或者是作服务使用
- war ---------> 需要部署的项目
如果有时候springboot启动不了,那么有时候是启动类所在模块的pom.xml中jar改成了pom,改回来一般能启动.文章来源:https://www.toymoban.com/news/detail-634632.html
mavensettings.xml标签
mirror标签
Maven 在构建 Spring Boot 项目时会根据 元素中定义的顺序依次尝试使用镜像源。如果找到可用的镜像源,将使用该镜像源进行构建。如果所有镜像源都不可用,将回退到默认的 Maven 中央仓库。文章来源地址https://www.toymoban.com/news/detail-634632.html
到了这里,关于maven中的scope的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!