Pawan Kulkarni
Pawan Kulkarni

Reputation: 11

Transitive Dependency How do i exclude. -- Maven

I have the below project structure under lib for project 2.

Project 2 (under lib)

- Maven dependencies (JARs)
- project 1 JAR (it has JARs in lib)
  - Maven dependencies of project 1 (JARs)

I want to exclude all JARs under project 1 while preparing project 2.

I'm currently using the below in my POMs (both project 1 and project 2)

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>

When building project 1, I want it to build as an executable JAR with lib.

However when building project 2, I want project 1 as only a compiled JAR (meaning with only class files and not having lib (JARs)).

Project 1 is included as a normal dependency in Project 2. Can anyone help me out?

Upvotes: 0

Views: 1698

Answers (2)

J Fabian Meier
J Fabian Meier

Reputation: 35785

If you want to exclude all dependencies of a given dependencies, use exclusions

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

and do it like

<dependency>
  <groupId>sample.ProjectA</groupId>
  <artifactId>Project-A</artifactId>
  <version>1.0</version>
  <scope>compile</scope>
  <exclusions>
    <exclusion>
      <groupId>*</groupId>
      <artifactId>*</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

Of course, you have to be sure that the missing transitive dependencies are not needed at runtime.

Upvotes: 1

Gonzalo Herreros
Gonzalo Herreros

Reputation: 309

If I understand correctly project 1 builds a jar which has inside a lib directory with the dependencies.

You could in project 1 have 2 assembly executions, one the basic jar and another with dependencies and execute manifest, normally you use a different "classifier" for multiple artifacts of the same project.

Otherwise you would need to "repackage" the jars to remove the libs you don't want using some plugin like Shade.

I think the first option is much better, also by default if you publish it to a repository both jars will be published so other people can get one or the other.

Upvotes: 0

Related Questions