<packaging>pom</packaging>
定义maven
项目的打包方式,一般有三种,分别是jar
,war
和pom
。打包方式一般对应于打包后文件的扩展名。如果不指定,默认为jar
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
在父pom中定义
<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.1.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
groupId:定义当前项目隶属的实际项目。groupId的定义类似于包名的定义,一般是到域名的方式后面跟实际项目名。倒域名可以指定项目的所属组织或公司,实际项目名则指定项目的真实名称。
artifactId:定义实际项目中的一个Maven模块,一般命名方式为实际项目名作为前缀,后面是模块名
version:定当前maven项目所处的版本
type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,默认值为jar。
scope:依赖的范围。默认 <scope>compile</scope>
名称 | 说明 |
compile | 默认值,编译、测试、运行都有效 |
test | 测试有效 |
provided | 编译、测试有效,运行无效。典型的例子是 servlet-api, 编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引人一遍。既然运行时容器会提供,所以 scope 为 provided 的依赖不会参与项目的打包 |
runtime | 编译无效、测试和运行有效。型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动 |
system | 编译、测试有效,运行无效。使用system范围的依赖时,必须通过systemPath元素显式的指定依赖文件的路径,<systemPath>${basedir}/lib/xxxxx.jar</systemPath>。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用 |
import | 特殊,导入依赖范围,只能在pom文件的<dependencyManagement> 中使用 |
optional:标记依赖是否可选。如果设为true,那么在A依赖B,B依赖于X和Y,且X和Y都可选时,此时,默认情况下,A是不依赖于X和Y的,如果A需要依赖X,那么需要在A中显式的声明X。
exclusions:用来排除传递性依赖。
分析依赖:
应用根目录打印依赖树:
mvn dependency:tree>tree.txt
会在根目录生成tree.txt文件,从文件中查找对应的wanring
[WARNING] The POM for com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:2.2.3.RELEASE is invalid, transitive dependencies (if any) will not be available: 1 problem was encountered while building the effective model for com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.3.RELEASE
[FATAL] Non-parseable POM D:\DevelopSoftWare\repository\org\springframework\cloud\spring-cloud-build\2.3.1.RELEASE\spring-cloud-build-2.3.1.RELEASE.pom: unexpected markup <!d (position: START_DOCUMENT seen \n<!d... @2:4) @ D:\DevelopSoftWare\repository\org\springframework\cloud\spring-cloud-build\2.3.1.RELEASE\spring-cloud-build-2.3.1.RELEASE.pom, line 2, column 4
根据提示把对应的repository文件spring-cloud-build删除,然后重新load。
也可以使用命令:
mvn -X -U clean package
再次查看编译日志,根据对应的日志信息,重新编译依赖
依赖列表
mvn dependency:list
依赖分析
mvn dependency:analyze
总结:上面这几条命令基本不会使用,开发过程中都是使用IDE自带的工具或插件
插件 Maven Helper插件
打开pom.xml
后,就会多出Dependency Analyzer
选项了
当切换到“Dependency Analyzer”视图后,可以发现如下界面