Question: 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?

Answer: 
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.
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.