Maven:Unpack-Dependencies ...然后忘记它们

时间:2010-06-22 09:21:48

标签: java maven-2

我有一个库A,它依赖于库B和C.我使用maven-dependency-plugin将B和C的库类解压缩到库的jar中(见下文)。

现在,当库D使用库A时,库D可以访问A,B和C的所有类。但是,我希望D仅依赖于A而不依赖于传递依赖性B和C.

alt text

我知道这可以通过手动排除B和C作为依赖关系A-D来实现,但我想以某种方式在A中声明B和C不会被使用A的模块所知。

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

3 个答案:

答案 0 :(得分:6)

我认为您可以使用“提供”范围标记依赖关系,因此依赖项目将假定jar已经“提供”。通常它们是由容器提供的,在您的情况下,您“依赖”它“提供”它们。

在任何情况下,依赖于A的模块都将忽略依赖关系B和C.

答案 1 :(得分:4)

第一个选项,使用dependency:unpack而不是dependency:unpack-dependencies,因此在插件配置中列出B和C,而不是将它们声明为依赖项(因此D将不知道它们)。

第二个选项,根据Peter的建议(参见Transitive Dependencies‎)将B和C声明为A与provided范围的A的依赖关系,并且您不会在D中“看到”它们。

答案 2 :(得分:0)

本周我使用maven-shade-plugin创建了一个类似的东西。 然而,当我将超级罐作为依赖项添加到另一个项目时,底层罐子被传递添加 为了解决这个问题,我必须在它的pom中将uber-jar的依赖关系标记为&lt; optional&gt; true&lt; / optional&gt; ,然后重新安装uber-jar。 见http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html