大家都知道Maven的优点是依赖管理,特别是前期使用ANT的开发者都有很多感触。最近要开发一个java工程,定的要使用maven,会使用hadoop和hbase的客户端,而引入一个hadoop-client的jar或者hbase的jar包,会依赖十几个其他的jar包,而这些jar包的功能我又用不上,所以这种依赖反倒成了工程瘦身的负担。关键我还有强迫症,见到这些对工程无用的包,我就抓狂。所以在网上百找千寻,找到了几个方法:
1. 项目间传递
如果我的当前项目是project1,project1要依赖project2,project1依赖project2的配置中加上<optional>true</optional>,表示依赖可选,
<dependency> <groupId>com.projecct</groupId> <artifactId>project2</artifactId> <version>1.0</version> <scope>compile</scope> <optional>true</optional> </dependency>
那么以后所有声明依赖project1的项目如果也依赖project2,就必须写手动声明。比如project3依赖project1和project2,如果project3只声明了对project1的依赖,那么project2不会自动加入依赖,需要重新声明对project2的依赖。
这种方式排除不了我项目中对第三方jar包所依赖的其他依赖,因为我不可能去修改第三方jar包的pom文件,所以只适合在项目组内部使用。
2. 依赖过滤
(1)单依赖过滤
同依赖过滤直接处理:可以过滤一个或者多个,如果过滤多个要写多个<exclusion>。这个也解决不了我的问题,或者说解决太麻烦,我那里知道hbase要依赖那些包,记不住。
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>0.94.17</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
(2)多依赖过滤
把所以依赖都过滤了。手起刀落~啊,世界都安静了。
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>0.94.17</version> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
自从搞定了这个依赖过滤啊,我腰不酸,腿不疼了,手不抖了,一口气啊,5000行代码,都不觉得累了~!看这里!看这里!看哪里! 想依赖那里就依那里!妈妈再也不用担心我的学习了!
相关推荐
Maven依赖管理遵循“传递性”原则,即如果你的项目依赖A库,而A库又依赖B库,Maven会自动将B库也一并引入。这大大简化了项目的构建过程,但同时也可能导致依赖冲突,需要通过排除机制或调整依赖版本来解决。 在`...
依赖范围(scope)是Maven依赖管理的一个重要概念。scope定义了依赖项的使用范围,主要有以下几个选项:compile、provided、runtime和test。compile表示依赖项在编译时需要,provided表示依赖项在编译和测试时需要,但...
在压缩包中的“Maven依赖特性”可能包含了一些特定的示例或者配置,用于展示Maven如何处理不同类型的依赖特性,例如:范围(scope,如compile、test等)、排除依赖、强制版本等。通过实际操作这些例子,你可以更深入...
Maven依赖管理遵循“传递性”原则,即项目可以直接依赖其他项目,间接依赖也会被自动引入。当出现相同类路径的冲突时,Maven会遵循“第一声明者优先”原则,即先声明的依赖版本优先。 2. **排除依赖(Exclusions)...
总的来说,解决Maven依赖冲突需要理解其工作原理,结合IDEA提供的工具,如Maven Helper插件和依赖结构图,可以有效地定位和排除冲突,保持项目的稳定性和可维护性。在实际开发中,避免引入不必要的依赖和定期清理...
2. **理解依赖传递性**:Maven会自动处理依赖的依赖,但可能会导致依赖冲突,需要通过 `<exclusions>` 标签排除不需要的子依赖。 3. **管理本地仓库**:定期清理无用的旧版本依赖,避免仓库过大影响性能。 4. **使用...
3. **排除依赖**:如果某个依赖导致了冲突,MavenHelper允许你直接在IDE内排除该依赖,减少了在pom.xml文件中手动编辑的繁琐步骤。 4. **依赖更新**:插件会显示每个依赖的最新版本,帮助你保持项目依赖的最新状态,...
总之,"MavenHelper"是Java开发者处理Maven依赖冲突的理想工具。通过它,开发者可以更有效地管理项目中的依赖关系,避免因冲突带来的困扰,从而提高开发效率和项目质量。在实际开发中,熟练掌握并运用这款插件,无疑...
Maven依赖的排除** 当一个依赖包含不必要的子依赖时,可以通过在POM文件中指定`<exclusions>`来排除不需要的库。 **9. Maven继承** - Maven的继承机制允许一个父POM管理多个子POM,统一管理依赖版本,减少重复信息...
使用Maven核心概念介绍(坐标、依赖、仓库、插件、生命周期等)、Maven与第三方Elicpse整合及如何在Eclipse中使用Maven、什么是私服、Maven为什么...任亮系列-maven依赖传递和可选依赖和排除依赖.mp41313.任亮系列-mav
`Maven Helper`还提供了优化Maven配置的建议,如减少无效的依赖、优化传递依赖等,以提升构建速度。 总的来说,`Maven Helper`是一款强大且实用的IDEA插件,它以直观的方式处理Maven项目中的依赖管理问题,使得...
它能更准确地解决传递性依赖,同时提供更好的依赖排除策略。 3. **插件管理**:Maven 3.5.0对插件管理进行了改进,支持更灵活的插件版本策略,允许开发者指定插件的精确版本,防止因插件版本问题导致的构建失败。 ...
此外,Maven支持排除依赖、传递依赖和依赖范围(如编译、测试等)的概念。 5. **插件机制** Maven的灵活性得益于其强大的插件系统。开发者可以通过编写插件实现自定义构建任务,如编译源码、生成文档、执行单元...
在阅读"Maven指南"的过程中,我们可以学习到几个关键知识点,包括:解决依赖冲突、排除不必要的传递性依赖、处理已提供构件以及利用`dependencyManagement`元素和`parent`元素的区别。 首先,当我们遇到`groupId`和...
1. **Maven依赖管理** Maven的`dependency`标签用于在`pom.xml`文件中声明项目所依赖的外部库。这些依赖可以是JAR文件,也可以是其他Maven项目。依赖管理包括指定依赖的`groupId`(组织ID)、`artifactId`(项目ID...
maven系统的思维导图总结,总结了maven的三大scope,maven的生命周期,eclipse中使用maven,maven中的依赖传递,依赖排除,继承、聚合、自动部署。
本课程将帮助你了解 Maven 的作用,常用命令,如何配置依赖,以及依赖的范围、依赖的传递性、依赖的排除、生命周期等重要概念,以及继承、聚合这样的 Maven 配置。更会手把手教你在 Eclipse 中玩转 Maven。