【问题标题】:Gradle: produced WAR file has two versions of JAR from child projectGradle:生成的 WAR 文件具有来自子项目的两个版本的 JAR
【发布时间】:2016-08-25 03:36:08
【问题描述】:

我有一个构建 WAR 的根项目和两个构建 JAR 的子项目。根项目以这种方式引用子项目:

apply plugin: 'war'

jar.enabled = false
war {
    dependencies {
        runtime project(':application1')
        runtime project(':application2')
    }
}

application2 依赖于 application1:

dependencies {
    compile '...:application1:1.+'
}

WAR 文件包含两个版本的 application1.jar:一个来自存储库,另一个刚刚构建。

编辑:Application2 必须依赖 application1 作为 JAR,因为这简化了 Eclipse 中嵌入 Jetty 的调试:Eclipse 自动将 application1.jar 添加到 Jetty 服务器启动配置的类路径中。

【问题讨论】:

  • 为什么 application2 那样依赖于 application1?不应该。
  • 应该如何指定依赖?
  • compile project(':application1').
  • >>为什么 application2 那样依赖于 application1?

标签: eclipse gradle jar jetty war


【解决方案1】:

您为根项目和application2 指定了对application1 项目的不同依赖项。

对于您的application2,它依赖于某个存储库中的库,但您的根项目依赖它作为子项目。 Gradle 无法确定 repo 中的某些库是否与子项目的工件相同。

如果您不想获得同一个库的 2 个版本,则必须使其依赖于同一个库:要么作为

compile '...:application1:1.+'

或作为

runtime project(':application1')

无论如何,在这两种情况下都依赖于同一个子项目,而不是依赖于某个项目和 repo 中的库,这似乎是可取的。

【讨论】:

  • 这对我的用例没有帮助。在问题中查看我的编辑。
  • @isobretatel 那么唯一的方法是声明提供的依赖项之一,您尝试过吗?
  • >> 声明提供的依赖项之一
  • 看这里docs.gradle.org/current/userguide/war_plugin.html#N15B7E WAR插件提供了2个附加配置:providedCompile和providedRuntime
  • 我必须复制对 JAR 的引用:war { dependencies { runtime project(':application1') runtime project(':application2') providedCompile servlet providedCompile 'mycompany:application1:DEVELOP-1.+ ' } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多