【问题标题】:Transitive Dependency How do i exclude. -- Maven传递依赖我如何排除。 -- 马文
【发布时间】:2017-08-10 07:51:50
【问题描述】:

对于项目 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 中的正常依赖项包含在内。有人可以帮我吗?

【问题讨论】:

    标签: maven dependencies maven-plugin


    【解决方案1】:

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

    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>
    

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

    【讨论】:

    • 即使我使用排除选项,我最终也会有可执行的 jar bcz 它的 spring-boot-maven-plugin 的功能?
    • 对不起,我不明白。
    【解决方案2】:

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

    您可以在项目 1 中执行 2 个程序集,一个是基本 jar,另一个具有依赖项并执行清单,通常您对同一项目的多个工件使用不同的“分类器”。

    否则,您需要“重新打包”jar 以使用 Shade 等插件删除您不想要的库。

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

    【讨论】:

    • 我只想创建一个 JAR 而不是两个。我希望我的仓库只保存一个文件。你能帮忙举个 Shade 插件的例子吗?我可以使用的东西?
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2018-07-06
    • 2019-10-29
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多