1、finalName 元素
打包构件的时候,如果想给构件取一个名字,就用 finalName 元素,如
<build>
<finalName>order</finalName>
</build>
如果不指定包名,默认包名是 a r t i f a c t I d − {artifactId}- artifactId−{version}.jar(war)。这在打包 war 类型的构件时尤其有用,毕竟 order.war 要比 order-1.0.war 方便部署得多。
2、scope 元素
scope 元素是 dependency 元素的子元素,如
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<scope>compile</scope>
</dependency>
默认取值是 compile。
maven 项目在编译和运行时有三套 classpath 环境:
- 主编译 classpath:也就是运行
mvn compile
时所使用的类路径 - 主运行 classpath:也就是我们在 IDE 中运行项目时所使用的类路径
- 测试编译和运行 classpath:也就是我们执行测试用例时所使用的类路径,这里测试用例的编译和运行使用的是同一套类路径
scope 有五种取值,分别是 compile、test、provided、runtime、system,其中 system 基本不常用,其余取值的含义如表所示:
有效/无效 | 主编译classpath | 测试编译和运行classpath | 主运行classpath | 能否被传递 |
---|---|---|---|---|
complie(默认) | 有 | 有 | 有 | 能 |
test | 无 | 有 | 无 | 不能 |
provided | 有 | 有 | 无 | 不能 |
runtime | 无 | 有 | 有 | 能 |
比如,如果 scope=provided,那么在运行mvn compile
命令时或者执行测试用例时,类路径下能找到依赖的 jar 包,如果是运行主程序,而主程序的类中有引用依赖 jar 包中的类,那么会产生 ClassNotFoundException 异常。
最后一列能否被传递的意思是,A 依赖 B,B 依赖 C,B依赖C的 scope=provided,那么 C 不会被传递给 A。
3、scope=import
scope 元素还有个取值,为 import,不过这个取值只有在 dependencyManagement 元素存在的情况下才会起作用。一般地,我们做 maven 项目版本管理的时候,会自己定义一个父 POM 文件,父 POM 文件中使用 dependencyManagement 来管理各个依赖构件的版本,子模块只需要继承父 POM,如:
<parent>
<groupId>cn.cjc</groupId>
<artifactId>learn-parent</artifactId>
<version>1.0</version>
</parent>
这时候,父 POM 文件中的 dependencyManagement 下的各个依赖构件的版本号需要自己写,但是如果图省事的话,父 POM 中也可以直接将 spring-boot-dependencies 拿来用,如
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这就是 scope=import 的作用。注意,type=pom。
当然,父 POM 中也可以选择继承 spring-boot-dependencies,这个根据个人喜好选择。
4、optional 元素
optional 元素是 dependency 元素的子元素,表示可选依赖,如
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<optional>true</optional>
</dependency>
当 A 依赖 B,B 依赖 C,B依赖C的 optional=true,那么 C 不会被传递给 A。
5、可继承的 POM 元素
- groupId
- version
- description
- organization
- url
- developers
- contributors
- distributionManagement
- issueManagement
- ciManagement
- scm
- properties
- dependencies
- dependencyManagement
- repositories
- build
- reporting