folder 发表于 2018-7-22 03:31:26

大神们。 maven有没有办法实现这样的依赖关系:

我再说详细一点。项目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 为 “被排除的”。
例如
<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>

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

例如

<dependency>
        <groupId>com.projecct</groupId>
        <artifactId>project2</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
        <optional>true</optional>
</dependency>
页: [1]
查看完整版本: 大神们。 maven有没有办法实现这样的依赖关系: