Maven 会自动解析所有项目的直接依赖和传递依赖,并且根据规则正确判断每个依赖的范围,对于一些依赖冲突,也能进行调节,以确保任何一个构件只有唯一的版本在依赖中存在。在这些工作之后,最后得到的那些依赖称为已解析依赖(Resolved Dependency)。

查看当前项目的已解析依赖:

 mvn dependency:list

查看当前项目的依赖树:

 mvn dependency:tree

上面 2 个命令可以帮助我们详细了解项目中所有依赖的具体信息。

下面这个命令可以帮助分析当前项目的依赖。

 mvn dependency:analyze
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.wzh.maven</groupId>
<artifactId>Demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>Demo</name>
<url>http://maven.apache.org</url> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.wzh.maven.test.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</plugin>
</plugins>
</build> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
</dependencies> </project>
 package org.wzh.maven.test;

 public class HelloWorld {

     public String sayHello() {
return "Hello Maven";
} public static void main(String[] args) {
System.out.print(new HelloWorld().sayHello());
} }

一个简单项目的 pom 和 仅有的一个 Java 类文件。

list

tree

analyze

Unused declared dependencied found: 意指项目中未使用的,但显式声明的依赖。需要注意的是,对于这样一类依赖,我们不应该简单地直接删除其声明,而是应该仔细分析。由于 analyze 只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。

还有一种情况,这里没有展示。

Used undeclared dependencied:意指项目中使用到的,但是没有显式声明的依赖。这种依赖意味着潜在的风险,当前项目直接在使用它们,例如有很多相关的 Java import 声明,而这种依赖是通过直接依赖传递进来的,当升级直接依赖的时候,相关传递性依赖的版本也可能发生变化,这种变化不易察觉,但是有可能导致当前项目出错。例如由于接口的改变,当前项目中的相关代码无法编译。这种隐藏的、潜在的威胁一旦出现,就往往需要耗费大量的时间来查明真相。因此,显式声明任何项目中直接用到的依赖。

最新文章

  1. HDU 3743 Frosh Week(归并排序求逆序对)
  2. UICollectionViewDelegateFlowLayout 使用
  3. xfce 双击窗口标题栏无法最大化解决办法
  4. C语言-删除重复字符
  5. HDOJ 1220 Cube
  6. sql over开窗函数
  7. CentOS安装视频播放器SMPlayer
  8. 如何在PowerDesigner将PDM导出生成WORD文档或者html文件
  9. HTML5 WebAudioAPI(三)--绘制频谱图
  10. Windows编程中的若干难点 - Windows程序设计(SDK)007
  11. java web项目基础
  12. java gui三个组件的使用
  13. 剑指Offer面试题1
  14. properJavaRDP 跑通本地远程桌面
  15. C# Linq to Entity 多条件 OR查询
  16. Python中的锁
  17. mingw using pthread
  18. 18.数组(一)之认识java数组
  19. 探讨后端选型中不同语言及对应的Web框架
  20. 如何生成唯一的server Id,server_id为何不能重复?

热门文章

  1. JavaScript——装饰者模式
  2. HDU 5464:Clarke and problem
  3. 文献阅读 - MonoLoco与关于Camera Matrix的笔记
  4. Oracle学习笔记(1)
  5. Essay写作关键:严谨的逻辑关系
  6. 爱奇艺用券付费VIP电影+python爬虫程序+可视化界面+下载本地
  7. 1、求loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None))
  8. 第四章:Schema与数据类型优化
  9. MFC 打开Jpg文件
  10. Java时间格式化年-月-日-时间