maven获取所有依赖项

这篇具有很好参考价值的文章主要介绍了maven获取所有依赖项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载maven的mvn dependency依赖分析和常用命令介绍 - 简书

maven的mvn dependency依赖分析和常用命令介绍

在项目开发过程中,我们经常会有分析项目依赖的需要,查找jar依赖路径,查找jar冲突等等。这时候,dependency命令会非常的有用,在此我们介绍下关于maven的dependency命令的一些用法。

1. mvn dependency:list ---- 列出项目的所有jar包

mvn dependency:list -Dverbose
该命令可以列出项目依赖的所有jar包,-Dverbose参数会把被忽略的jar,即相同jar包的不同版本引入也列出来。
输出示例:

[INFO]    org.springframework:spring-aop:jar:5.0.6.RELEASE:compile
[INFO]    org.hibernate.validator:hibernate-validator:jar:6.0.9.Final:compile
[INFO]    com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile
[INFO]    com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.5:compile
[INFO]    org.springframework:spring-expression:jar:5.0.6.RELEASE:compile
[INFO]    org.springframework.boot:spring-boot-starter:jar:2.0.2.RELEASE:compile
[INFO]    org.springframework.boot:spring-boot-starter-logging:jar:2.0.2.RELEASE:compile
[INFO]    org.yaml:snakeyaml:jar:1.19:runtime
[INFO]    org.springframework.boot:spring-boot:jar:2.0.2.RELEASE:compile
[INFO]    junit:junit:jar:3.8.1:test

 

2. mvn dependency:tree ---- 列出项目的包依赖树

mvn dependency:tree -Dverbose
这个命令跟上一个命令的区别就是,这个命令的依赖,输出来是个树,更方便看依赖关系。
输出示例:

[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.0.2.RELEASE:compile
[INFO]    +- org.springframework.boot:spring-boot-starter:jar:2.0.2.RELEASE:compile
[INFO]    |  \- org.springframework:spring-core:jar:5.0.6.RELEASE:compile
[INFO]    |     \- org.springframework:spring-jcl:jar:5.0.6.RELEASE:compile
[INFO]    +- org.springframework:spring-web:jar:5.0.6.RELEASE:compile
[INFO]    |  \- org.springframework:spring-beans:jar:5.0.6.RELEASE:compile
[INFO]    \- org.springframework:spring-webmvc:jar:5.0.6.RELEASE:compile
[INFO]       +- org.springframework:spring-aop:jar:5.0.6.RELEASE:compile
[INFO]       +- org.springframework:spring-context:jar:5.0.6.RELEASE:compile
[INFO]       \- org.springframework:spring-expression:jar:5.0.6.RELEASE:compile

dependency:tree有几个比较重要的参数,非常有用:

  • includes
    • 说明:该参数可以列出指定要求的jar,其他的忽略
    • 示例:-Dincludes=velocity:velocity,只列出velocity的依赖关系
    • 参数值:[groupId]:[artifactId]:[type]:[version],参数格式就是这样的,没有的值可以留空,举例-Dincludes=:spring-aop-Dincludes=:::5.0.6.RELEASE-Dincludes=org.springframework
    • 通配符:在参数中可以使用通配符,例如org.apache.*:::*-SNAPSHOT
    • 多个参数值:参数后面可以跟多个参数值,以英文逗号分隔,举例-Dincludes=org.apache.maven*,org.codehaus.plexus
  • excludes
    • 说明:该参数的用法跟includes是一样的,不过这个参数的作用是排除指定的jar

示例:查看包冲突

比如我们查看一下commons-collections包的冲突
命令:
mvn dependency:tree -Dverbose -Dincludes=commons-collections
输出:

[INFO] [dependency:tree]
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT
[INFO] +- org.apache.maven.reporting:maven-reporting-impl:jar:2.0.4:compile
[INFO] |  \- commons-validator:commons-validator:jar:1.2.0:compile
[INFO] |     \- commons-digester:commons-digester:jar:1.6:compile
[INFO] |        \- (commons-collections:commons-collections:jar:2.1:compile - omitted for conflict with 2.0)
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile
[INFO]    \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile
[INFO]       \- commons-collections:commons-collections:jar:2.0:compile

我们可以看到,2.1版本的jar被忽略掉了,因为maven是根据路径最近原则来解析依赖,2.0版本路径更短,所以2.0版本被引入,2.1版本路径比2.0要长,所以被忽略。
使用这个命令可以轻松的查看包的引入路径,包的冲突情况。
此处一定不要省略-Dverbose参数,要不然是不会显示被忽略的包

3. dependency:analyze-only ---- 分析依赖

dependency:analyze-only命令可以分析整个项目,并且找出项目中依赖有如下情况的:

  • 声明了并且使用了的依赖
  • 没有声明但是使用了的依赖
  • 声明了但是没有使用的依赖

输出示例:

[INFO] Used declared dependencies found:
[INFO]    cn.hutool:hutool-all:jar:4.3.1:compile
[INFO]    com.google.guava:guava:jar:27.0.1-jre:compile
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.7.25:compile
[WARNING]    org.springframework:spring-context:jar:4.3.22.RELEASE:compile
[WARNING]    org.springframework.boot:spring-boot-autoconfigure:jar:1.5.19.RELEASE:compile
[WARNING]    org.springframework.boot:spring-boot:jar:1.5.19.RELEASE:compile
[WARNING]    org.springframework:spring-beans:jar:4.3.22.RELEASE:compile
[WARNING]    junit:junit:jar:4.12:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.springframework.boot:spring-boot-starter-test:jar:1.5.19.RELEASE:test
[WARNING]    com.h2database:h2:jar:1.4.197:test
[WARNING]    org.springframework.boot:spring-boot-starter:jar:1.5.19.RELEASE:compile
[WARNING]    com.fasterxml.jackson.core:jackson-databind:jar:2.8.11.3:compile
[WARNING]    org.projectlombok:lombok:jar:1.16.22:compile
[WARNING]    com.alibaba:fastjson:jar:1.2.55:compile

需要注意的是,如果你要查看声明了并且使用了的依赖,必须加上参数-Dverbose

4. dependency:analyze-duplicate ---- 分析<dependencies/> 和<dependencyManagement/>

这个命令会查找<dependencies/> 和 <dependencyManagement/>中重复声明的依赖

5. dependency:list-repositories ---- 列出所有的远程repositories

命令:
mvn dependency:list-repositories

输出:

[INFO]        id: sonatype-nexus-snapshots
      url: https://oss.sonatype.org/content/repositories/snapshots
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => false, update => daily]

[INFO]        id: apache.snapshots
      url: https://repository.apache.org/snapshots
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => false, update => daily]

[INFO]        id: central
      url: https://repo.maven.apache.org/maven2
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => daily]

6. dependency:purge-local-repository ---- 清理本地repository

这个命令的会首先解析整个项目的依赖,然后从本地repository中清理这些依赖,重新从远程repository下载。文章来源地址https://www.toymoban.com/news/detail-444361.html

  • 直接依赖
    有一点要说清楚,这个命令默认的对所有的依赖项进行操作。所以它会在清除操作之前,下载某些缺失的依赖来收集完整的依赖树信息。为了避免这些预下载的操作,你可以设置参数-DactTransitively=false,仅对项目的直接依赖进行操作。
  • 指定/排除依赖
    你也可以有针对性的只操作某些包,需要添加参数-Dincludes,明确的声明包,这个是可以传多个值的,用英文逗号分隔,举例:dependency:purge-local-repository -Dincludes=org.slf4j:slf4j-api,org.slf4j:log4j-over-slf4j-Dexcludes也是一样的道理,只不过是排除某些依赖。
  • 自定义清理
    如果你想清理不在本项目中的依赖,也可以使用这个,不过参数是不一样的。mvn dependency:purge-local-repository -DmanualIncludes=org.apache:apache,参数-DmanualInclude可以让你清理不在本项目中的依赖,但是不会重新解析依赖了,因为本项目不需要这些依赖。这个对清理parent pom,导入的pom,maven插件非常有用。

到了这里,关于maven获取所有依赖项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Maven本地配置获取nexus私服的依赖

    Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包: Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包_nexus maven-releases 允许deploy-CSDN博客 在上面讲的是在需要拉取私服依赖的项目中的pom中配置repository的方式去

    2024年02月05日
    浏览(46)
  • Idea怎么配置Maven才能优先从本地仓库获取依赖

    网上的方法 : 在设置中搜索 Runner ,在VM Option中设置参数 -DarchetypeCatalog=internal 删除 解压后的依赖包中的 _remote.repositories m2e-lastUpdated.properties *.lastUpdated 文件。 上边都没有效果 最终的解决方法,修改maven配置文件settings.xml 主要两个方面 第一:修改本地仓库的地址,这个是自己

    2024年02月02日
    浏览(50)
  • 数据依赖和控制依赖 Data Dependence and Contol Dependence

    数据依赖和控制依赖分析是许多优化的重要工具,比如指令调度、激进死代码删除(ADCE)等。 数据依赖是数据流之间的一种依赖,主要包括四种(参考鲸书)。 1.流依赖/真依赖( flow/true dependence ):S1定义了一个值,随后S2使用了这个值。记 S 1   δ f   S 2 S1 delta^f S2 S 1

    2024年02月09日
    浏览(62)
  • Maven多模块管理(转载)

    注意:父模块需设定打包方式为pom https://cloud.tencent.com/developer/article/1667275 在父类maven中加入,不会继承给子类,只能规定子类的依赖版本,子类加入dependence后无需写入 在一个项目中存在多个模块时,可以通过聚合一键打包、安装所有的模块。只需要在父maven中加入modules标签

    2024年02月07日
    浏览(37)
  • 什么是依赖注入(Dependency Injection)?

    依赖注入(Dependency Injection,简称DI)是一种设计模式,用于实现类之间的解耦和依赖关系的管理。它通过将依赖关系的创建和维护责任转移到外部容器中,使得类不需要自己实例化依赖对象,而是由外部容器动态地注入依赖。 传统的对象创建方式往往由类自身负责创建和管

    2024年02月15日
    浏览(43)
  • 【Python开发】FastAPI 07:Depends 依赖注入

    在 FastAPI 中, Depends 是一个依赖注入系统,用于注入应用程序中所需的依赖项,通过 Depends ,我们可以轻松地将依赖项注入到 FastAPI 路由函数中。简单来说,Depends 依赖注入的目的就是将代码重复最小! 目录 1 Depends 使用 1.1 依赖注入介绍 1.2 demo 1.3 OpenAPI 集成 2 不同依赖项

    2024年02月08日
    浏览(46)
  • vue-package.json中的dependencies(生产依赖)和devDependencies(开发依赖)

     以下所有安装命令都会对node_modules生效,即安装都会安装到node_modules中,删除也会中从node_modules中删除 1、不会添加到package.json中 2、会添加到package.json的dependencies中 ,build时会打进去, 3、会添加到package.json的devDependencies中   参考package.json中的dependencies(生产依赖)和devD

    2024年02月13日
    浏览(47)
  • 【VC++开发必备神器 -- Dependencies,查看依赖库DLL,支持win10,比depends更好用】

    软件之Dependencies,不同于depends 1、微软官方有提供depends,可以查看exe文件的依赖库,仅适用于winxp/win7/win8,但是不能用于win10,会卡死报错. 官网下载:Dependency Walker (depends.exe) Home Page 左上角第一个窗口是Dll信息窗口,显示程序所需的Dll模块。 如何使用Depends.exe查看dll动态链

    2024年02月05日
    浏览(49)
  • Angular 17+ 高级教程 – Dependency Injection 依赖注入

    本来是想先介绍 Angular Component 的,但 Component 里面会涉及到一些 Dependency Injection (简称 DI) 的概念,所以还是先介绍 DI 吧。 温馨提醒:如果你对 JS class、prototype 不太熟悉的话,建议你先看这篇 JavaScript – 理解 Object, Class, This, Prototype, Function, Mixins   首先我们有一个 class Ser

    2024年03月09日
    浏览(63)
  • IDEA库(Libraries)和模块依赖(Dependencies)详解

    库是模块可以依赖的已编译代码的集合。在IntelliJ IDEA中,可以在三个级别上定义库: 全局 (可用于许多项目), 项目 (可用于 项目 中的所有模块)和 模块 (可用于一个模块) 简单来说,IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包