【发布时间】:2013-12-29 02:26:27
【问题描述】:
我有一个项目需要依赖另一个项目生成的 ZIP 文件。那个“其他项目”不在我的控制之下。正确构建我的项目需要 ZIP 文件。执行我的项目不需要它。我需要 Maven 为我下载 ZIP 文件。
我目前像这样创建对 ZIP 工件的依赖项:
<dependency>
<groupId>org.foo</groupId>
<artifactId>zeus</artifactId>
<version>1.1</version>
<type>zip</type>
<scope>test</scope>
</dependency>
我的问题是范围。如果我使用除test 之外的任何东西,它会带来很多来自“其他项目”的传递依赖关系,这会搞砸我自己的项目。使用test 作为范围实际上可以完成这项工作,但它在我的 IDE 中显示为测试依赖项。所以我觉得我做错了什么。这不是测试依赖!
我查看了可用的 Maven 范围(“编译”、“提供”等),但似乎找不到与我的用例匹配的范围。我做错了吗?
【问题讨论】:
-
我会使用 'provided' 并在最坏的情况下排除它拖拽的任何额外内容(提示:使用 mvn dependency:tree 为你的依赖结构获得一个很好的可视化)
-
@radai。我需要 Maven 为我下载依赖项。 “提供”是否这样做?
-
@radai
provided不起作用,因为这与 OP 想要的相反。provided表示“在编译时需要,但在运行时不是”。 -
问题似乎出在另一个人工制品上 - 应该构建 zip 以便不与传递依赖项捆绑在一起。除了手动排除您不想要的依赖项之外,我认为唯一要做的就是使用 shade 插件。
-
@BoristheSpider。虽然我无法控制“其他项目”,但我可以在我自己的项目和“其他项目”之间创建一个中间项目,然后该中间项目将使用 shade 插件来排除依赖项。那行得通吗?我以前从未使用过阴影插件。感谢您指出。