传递依赖如何排除。 - Maven

时间:2017-08-10 07:51:50

标签: maven dependencies maven-plugin

我在项目2的lib下有以下项目结构。

项目2(lib下)

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

我想在准备项目2时排除项目1下的所有JAR。

我目前在我的POM(项目1和项目2)中使用以下内容

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

构建项目1时,我希望它构建为带有lib的可执行JAR。

但是在构建项目2时,我希望项目1只是一个已编译的JAR(意思是只有类文件而没有lib(JAR))。

项目1作为项目​​2中的正常依赖项包含在内。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,项目1会构建一个jar,它包含一个带有依赖项的lib目录。

你可以在项目1中有2个程序集执行,一个是基本jar,另一个是依赖和执行清单,通常你使用不同的&#34;分类器&#34;对于同一项目的多个工件。

否则你需要&#34;重新包装&#34;用于删除你不想使用像Shade这样的插件的库。

我认为第一个选项要好得多,默认情况下,如果将它发布到存储库,两个jar都会被发布,以便其他人可以获得其中一个。

答案 1 :(得分:0)

如果要排除给定依赖项的所有依赖项,请使用排除项

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

并且像

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

当然,您必须确保在运行时不需要缺少传递依赖项。