Maven--优化依赖

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

 

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

1 mvn dependency:list

 

查看当前项目的依赖树:

1 mvn dependency:tree

 

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

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

1 mvn dependency:analyze

 

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4 
 5     <groupId>org.wzh.maven</groupId>
 6     <artifactId>Demo</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>jar</packaging>
 9 
10     <name>Demo</name>
11     <url>http://maven.apache.org</url>
12 
13     <build>
14         <plugins>
15             <plugin>
16                 <groupId>org.apache.maven.plugins</groupId>
17                 <artifactId>maven-shade-plugin</artifactId>
18                 <version>1.2.1</version>
19                 <executions>
20                     <execution>
21                         <phase>package</phase>
22                         <goals>
23                             <goal>shade</goal>
24                         </goals>
25                     </execution>
26                 </executions>
27                 <configuration>
28                     <transformers>
29                         <transformer
30                             implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
31                             <mainClass>org.wzh.maven.test.HelloWorld</mainClass>
32                         </transformer>
33                     </transformers>
34                 </configuration>
35             </plugin>
36         </plugins>
37     </build>
38 
39     <properties>
40         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
41     </properties>
42 
43     <dependencies>
44         <dependency>
45             <groupId>junit</groupId>
46             <artifactId>junit</artifactId>
47             <version>4.7</version>
48             <scope>test</scope>
49         </dependency>
50         <dependency>
51             <groupId>org.springframework</groupId>
52             <artifactId>spring-core</artifactId>
53             <version>4.3.9.RELEASE</version>
54         </dependency>
55         <dependency>
56             <groupId>mysql</groupId>
57             <artifactId>mysql-connector-java</artifactId>
58             <version>5.1.10</version>
59         </dependency>
60     </dependencies>
61 
62 
63 </project>
 1 package org.wzh.maven.test;
 2 
 3 public class HelloWorld {
 4     
 5     public String sayHello() {
 6         return "Hello Maven";
 7     }
 8     
 9     public static void main(String[] args) {
10         System.out.print(new HelloWorld().sayHello());
11     }
12 
13 }

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

list

tree

analyze

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

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

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

posted @ 2017-07-25 09:34  MicroCat  阅读(365)  评论(0编辑  收藏  举报