Java Maven对zip工件的依赖
我有一个项目,需要依赖于另一个项目产生的ZIP文件。“其他项目”不在我的控制之下。正确构建我的项目需要ZIP文件。执行我的项目不需要它。我需要Maven帮我下载ZIP文件 我目前在ZIP工件上创建了一个依赖项,如下所示:Java Maven对zip工件的依赖,java,maven,Java,Maven,我有一个项目,需要依赖于另一个项目产生的ZIP文件。“其他项目”不在我的控制之下。正确构建我的项目需要ZIP文件。执行我的项目不需要它。我需要Maven帮我下载ZIP文件 我目前在ZIP工件上创建了一个依赖项,如下所示: org.foo 宙斯 1.1 拉链 测试 我的问题是范围。如果我使用的不是test,它会带来很多来自“其他项目”的可传递依赖项,这会把我自己的项目搞砸。使用test作为作用域实际执行任务,但它在我的IDE中显示为测试依赖项。所以我觉得我做错了什么。这不是一个测试依赖项 我查
org.foo
宙斯
1.1
拉链
测试
我的问题是范围。如果我使用的不是test
,它会带来很多来自“其他项目”的可传递依赖项,这会把我自己的项目搞砸。使用test
作为作用域实际执行任务,但它在我的IDE中显示为测试依赖项。所以我觉得我做错了什么。这不是一个测试依赖项
我查看了可用的Maven作用域(“compile”、“provided”等),但似乎找不到一个与我的用例相匹配的。我做错了什么吗?您必须将所有可传递依赖项声明为排除项:
<dependency>
<groupId>org.foo</groupId>
<artifactId>zeus</artifactId>
<version>1.1</version>
<type>zip</type>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.foo</groupId>
<artifactId>transitive-dep-1</artifactId>
</exclusion>
<exclusion>
<groupId>org.foo</groupId>
<artifactId>transitive-dep-2</artifactId>
</exclusion>
<!-- add all transitive deps. -->
</exclusions>
</dependency>
org.foo
宙斯
1.1
拉链
编译
org.foo
传递-dep-1
org.foo
传递-dep-2
您可以使用通配符排除所有可传递依赖项:
<dependency>
<groupId>org.foo</groupId>
<artifactId>zeus</artifactId>
<version>1.1</version>
<type>zip</type>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
org.foo
)我会使用“提供的”,最坏的情况下会排除它附带的任何额外内容(提示:使用mvn dependency:tree为您的依赖结构提供一个很好的可视化)@radai。我需要Maven为我下载依赖项。“提供的”能做到吗?@radai提供的
不起作用,因为这与OP想要的正好相反provided
的意思是“编译时需要,但运行时不需要”。问题似乎在于另一个人工制品——zip的构建应该使可传递依赖项不与之捆绑在一起。除了手动排除不需要的依赖项之外,我想唯一要做的就是使用shade插件。@BoristheSpider。虽然我无法控制“其他项目”,但我可以在我自己的项目和该“其他项目”之间创建一个中间项目,中间项目将使用shade插件来排除依赖项。这样行吗?我以前从未使用过shade插件。谢谢你指出,谢谢。我想这可能是一场维护噩梦,因为我必须跟踪其他项目的依赖关系。我觉得我的用例很简单,而且(显然)没有明显的解决方案,这有点奇怪。我只想依靠一个拉链制品。。。这有多困难?(每当我发现自己有这样的想法时,我总是试着照镜子,认为也许我误解了Maven的概念?)出于各种原因,我使用这个解决方案(尽管我看到维护噩梦),而不是像其他地方建议的那样使用shade插件。谢谢