0%

各类项目依赖可视化工具

Maven

Maven 工具: mvn dependency:tree

在项目目录执行 mvn dependency:tree :

https://github.com/che-samples/che-ide-server-extension 项目的子项目 plugins/plugin-serverservice/plugin-serverservice-ide 的依赖如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[INFO] Scanning for projects...
[INFO]
[INFO] ----------< org.eclipse.che.sample:plugin-serverservice-ide >-----------
[INFO] Building Plugin ServerService :: Plugin :: IDE 6.16.0
[INFO] ------------------------------[ gwt-lib ]-------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ plugin-serverservice-ide ---
[INFO] org.eclipse.che.sample:plugin-serverservice-ide:gwt-lib:6.16.0
[INFO] +- com.google.inject:guice:jar:4.2.2:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- javax.inject:javax.inject:jar:1:compile
[INFO] +- org.eclipse.che.core:che-core-commons-gwt:jar:6.16.0:compile
[INFO] | +- com.google.code.findbugs:jsr305:jar:3.0.1:compile

... ...

[INFO] | +- org.eclipse.che.core:che-core-api-core:jar:6.16.0:compile
[INFO] | | +- com.google.code.gson:gson:jar:2.8.5:compile
[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | | +- javax.ws.rs:javax.ws.rs-api:jar:2.0:compile
[INFO] | | +- net.java.dev.jna:jna:jar:4.1.0:compile
[INFO] | | +- org.eclipse.che.core:che-core-commons-json:jar:6.16.0:compile
[INFO] | | +- org.eclipse.che.core:che-core-commons-lang:jar:6.16.0:compile
[INFO] | | | \- org.apache.commons:commons-compress:jar:1.18:compile
[INFO] | | +- org.eclipse.che.core:che-core-commons-schedule:jar:6.16.0:compile
[INFO] | | | \- org.eclipse.che.core:che-core-commons-inject:jar:6.16.0:compile
[INFO] | | | +- com.google.inject.extensions:guice-servlet:jar:4.2.2:compile
[INFO] | | | \- org.everrest:everrest-integration-guice:jar:1.13.5:compile
[INFO] | | +- org.everrest:everrest-core:jar:1.13.5:compile
[INFO] | | | +- commons-fileupload:commons-fileupload:jar:1.3.3:compile
[INFO] | | | +- javax.mail:mail:jar:1.4.4:compile
[INFO] | | | \- commons-io:commons-io:jar:2.6:compile
[INFO] | | \- org.slf4j:slf4j-api:jar:1.7.24:compile
[INFO] | +- org.eclipse.che.core:che-core-commons-annotations:jar:6.16.0:compile
[INFO] | +- org.vectomatic:lib-gwt-svg:jar:0.5.12:compile
[INFO] | \- org.webjars:requirejs:jar:2.1.15:runtime
[INFO] +- org.eclipse.che.core:che-core-ide-api:jar:6.16.0:compile
[INFO] | +- com.google.inject.extensions:guice-assistedinject:jar:4.2.2:compile
[INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | +- org.eclipse.che:che-exec-agent-shared:jar:6.16.0:compile

... ...

[INFO] | +- org.eclipse.che.core:che-core-api-user-shared:jar:sources:6.16.0:compile
[INFO] | +- org.eclipse.che.core:che-core-api-workspace-shared:jar:6.16.0:compile
[INFO] | \- org.eclipse.che.core:che-core-api-workspace-shared:jar:sources:6.16.0:compile
[INFO] \- com.google.gwt:gwt-user:jar:2.8.2:provided
[INFO] +- com.google.jsinterop:jsinterop-annotations:jar:1.0.2:provided
[INFO] +- com.google.jsinterop:jsinterop-annotations:jar:sources:1.0.2:provided
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- org.w3c.css:sac:jar:1.3:provided
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.313 s
[INFO] Finished at: 2019-08-01T10:40:52+08:00
[INFO] ------------------------------------------------------------------------

Eclipse 可视化界面

打开 pom.xml, Eclipse 提供多个视图, 点击下面的 Dependency Hierarchy 视图:

Maven-Eclipse1.png
Maven-Eclipse1.png

点击左栏中的包时会在右栏高亮对应包, 在右栏点击包会在左栏高亮所有依赖与该包的包.

Maven-Eclipse2.gif
Maven-Eclipse2.gif

Apache Maven Dependency Plugin

在项目的 pom.xml 下添加如下 plugin:

1
2
3
4
5
6
7
8
9
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>

然后

1
mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml

目录下生成 dependency.graphml .

然后下载 yEd , 或者使用 yEd 的在线版本 以生成查看导出依赖图.

同样是 plugin-serverservice-ide 的依赖↓:

yEd-Dependency.png
yEd-Dependency.png

C / C++

GCC 工具: gcc -M <file>.cpp

对于 C++ 文件:

1
2
3
4
#include <iostream>
#include "lib1.h"

... ...

gcc -M <file>.cpp : 显示该文件的所有依赖.

1
2
3
4
5
6
7
8
9
10
11
12
main.o: main.cpp /usr/include/stdc-predef.h /usr/include/c++/5/iostream \
/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h \
/usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \

... ...

/usr/include/c++/5/bits/locale_facets.tcc \
/usr/include/c++/5/bits/basic_ios.tcc \
/usr/include/c++/5/bits/ostream.tcc /usr/include/c++/5/istream \
/usr/include/c++/5/bits/istream.tcc lib1.h

gcc -MM <file>.cpp : 显示该文件的所有依赖 (不包括系统依赖的头文件).

1
main.o: main.cpp lib1.h

CMake: Graphviz

需要 Graphviz 工具: sudo apt-get install graphviz .

1
2
3
4
# 当前在项目 (CMakeLists.txt) 目录
cd build/
cmake .. --graphviz=<graph>.dot
dot <graph>.dot -T png -o <figure>.png

项目 CMake 本身的依赖图:

CMake-Dependency.png
CMake-Dependency.png

项目 OpenCV 的依赖图:

dot 布局:

OpenCV-Dependency-dot.png
OpenCV-Dependency-dot.png

circo 布局:

OpenCV-Dependency-circo.png
OpenCV-Dependency-circo.png