peterh
peterh

Reputation: 19225

Maven dependency on zip artifact

I have a project that needs to depend on a ZIP file which is produced by another project. That 'other project' is not under my control. The ZIP file is required for correctly building my project. It is not required for execution of my project. I need Maven to download the ZIP file for me.

I currently create a dependency on the ZIP artifact like this:

<dependency>
    <groupId>org.foo</groupId>
    <artifactId>zeus</artifactId>
    <version>1.1</version>
    <type>zip</type>
    <scope>test</scope>
</dependency>

My problem is the scope. If I use anything but test it brings with it a lot of transitive dependencies from 'other project' which screws up my own project. Using test as the scope actually does the job but it shows in my IDE as a Test-dependency. So I feel I'm doing something wrong. This is not a test-dependency!

I've looked through the available Maven scopes ('compile', 'provided', etc) and I just cannot seem to find one that matches my use case. Am I doing something wrong?

Upvotes: 5

Views: 11021

Answers (2)

AntoineT
AntoineT

Reputation: 29

You can just exclude all transitive dependencies with wildcard:

<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>

(source Exclude all transitive dependencies of a single dependency)

Upvotes: 2

agranjo
agranjo

Reputation: 1374

You have to declare all transitive dependencies as exclusions:

<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>

Upvotes: 0

Related Questions