Java Maven对zip工件的依赖

Java Maven对zip工件的依赖,java,maven,Java,Maven,我有一个项目,需要依赖于另一个项目产生的ZIP文件。“其他项目”不在我的控制之下。正确构建我的项目需要ZIP文件。执行我的项目不需要它。我需要Maven帮我下载ZIP文件 我目前在ZIP工件上创建了一个依赖项,如下所示: org.foo 宙斯 1.1 拉链 测试 我的问题是范围。如果我使用的不是test,它会带来很多来自“其他项目”的可传递依赖项,这会把我自己的项目搞砸。使用test作为作用域实际执行任务,但它在我的IDE中显示为测试依赖项。所以我觉得我做错了什么。这不是一个测试依赖项 我查

我有一个项目,需要依赖于另一个项目产生的ZIP文件。“其他项目”不在我的控制之下。正确构建我的项目需要ZIP文件。执行我的项目不需要它。我需要Maven帮我下载ZIP文件

我目前在ZIP工件上创建了一个依赖项,如下所示:


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插件。谢谢