鱼C论坛

 找回密码
 立即注册
查看: 2424|回复: 1

[已解决]大神们。 maven有没有办法实现这样的依赖关系:

[复制链接]
发表于 2018-7-22 03:31:26 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我再说详细一点。项目A依赖项目B,项目B依赖项目C,但是项目C的所有类对于项目A不可见。 比如说你有一个项目a.jar,里面有类A,有个叫做A.fun1()的方法。
A.fun1()方法调用了某个类库b.jar里面的一个类B的一个叫做B.fun2()的方法。
B.fun2()方法又调用了另一个类库c.jar里面类C的一个叫做C.fun3()方法
现在你能控制的只有a.jar里面的代码。你如果把b.jar和c.jar都放入依赖,就意味着A可以直接调用C了,这达不到目的。
但是如果你把b.jar放入依赖,而排除掉c.jar,那么你的A通过B也调用不到C,因为它没了。
最佳答案
2018-8-1 10:35:04
您好
您可以使用依赖排除来使得A无法调用C。任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”。
例如
  1. <dependency>   
  2.         <groupId>org.apache.hbase</groupId>
  3.         <artifactId>hbase</artifactId>
  4.         <version>0.94.17</version>
  5.         <exclusions>  
  6.                  <exclusion>         
  7.                          <groupId>commons-logging</groupId>               
  8.                          <artifactId>commons-logging</artifactId>  
  9.                  </exclusion>  
  10.         </exclusions>  
  11. </dependency>
复制代码


当然还可以使用依赖可选,任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。

例如

  1. <dependency>
  2.         <groupId>com.projecct</groupId>
  3.         <artifactId>project2</artifactId>
  4.         <version>1.0</version>
  5.         <scope>compile</scope>
  6.         <optional>true</optional>
  7. </dependency>
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-1 10:35:04 | 显示全部楼层    本楼为最佳答案   
您好
您可以使用依赖排除来使得A无法调用C。任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”。
例如
  1. <dependency>   
  2.         <groupId>org.apache.hbase</groupId>
  3.         <artifactId>hbase</artifactId>
  4.         <version>0.94.17</version>
  5.         <exclusions>  
  6.                  <exclusion>         
  7.                          <groupId>commons-logging</groupId>               
  8.                          <artifactId>commons-logging</artifactId>  
  9.                  </exclusion>  
  10.         </exclusions>  
  11. </dependency>
复制代码


当然还可以使用依赖可选,任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。

例如

  1. <dependency>
  2.         <groupId>com.projecct</groupId>
  3.         <artifactId>project2</artifactId>
  4.         <version>1.0</version>
  5.         <scope>compile</scope>
  6.         <optional>true</optional>
  7. </dependency>
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表