无法排除c3p0

时间:2017-02-04 20:54:31

标签: gradle dependencies

我有以下gradle配置(基于the docs):

  compile ('org.quartz-scheduler:quartz:2.2.3') {
    exclude group: 'c3p0'
  }
  compile ('org.quartz-scheduler:quartz-jobs:2.2.3') {
    exclude group: 'c3p0'
  }

我也尝试过:

  compile ('org.quartz-scheduler:quartz:2.2.3') {
    exclude group: 'c3p0', module: 'c3p0'
  }
  compile ('org.quartz-scheduler:quartz-jobs:2.2.3') {
    exclude group: 'c3p0', module: 'c3p0'
  }

然而我仍然得到了

+--- org.quartz-scheduler:quartz:2.2.3
|    +--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
|    \--- c3p0:c3p0:0.9.1.1

当我列出依赖项时(jar显示在我的war文件中)。

------------------------------------------------------------
Gradle 3.3
------------------------------------------------------------

Build time:   2017-01-03 15:31:04 UTC
Revision:     075893a3d0798c0c1f322899b41ceca82e4e134b

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_111 (Oracle Corporation 25.111-b14)
OS:           Mac OS X 10.12.2 x86_64

这是一个问题,因为hibernate libs引用了0.9.2.1 c3p0,但是它有一个不同的组(com.mchange),因此新版本的常规依赖性首选项不会发生。尽管已经在结账时配置了连接验证,但我有奇怪的关闭语句连接池错误。投掷它的代码全部由JPA管理,我不会在任何地方调用...所以我想在这里清理c3p0以确保它不是源于混合版本的问题阶级路径。

2 个答案:

答案 0 :(得分:2)

这是您的整个Gradle文件吗?使用Gradle 3.3,这对我有用:

apply plugin: 'war'

repositories {
    mavenCentral()
}

dependencies {
    compile ('org.quartz-scheduler:quartz:2.2.3') {
        exclude group: 'c3p0'
    }
    compile ('org.quartz-scheduler:quartz-jobs:2.2.3') {
        exclude group: 'c3p0'
    }
}

如果我评论exclude,那么我会看到c3p0中列出的gradle dependencies jar;如上所述,我没有。

答案 1 :(得分:0)

我发现了问题。我使用Michael Easter的裸骨模板作为开始和渐进添加的东西。当我在JesterJ上添加一个依赖项时返回的问题...导致这个(省略了许多不相关的库):

+--- org.jesterj:injest:0.2-SNAPSHOT
|    +--- org.apache.tika:tika-parsers:1.12
|    |    +--- edu.ucar:netcdf4:4.5.5
|    |    |    +--- edu.ucar:cdm:4.5.5
|    |    |    |    +--- org.quartz-scheduler:quartz:2.2.0 -> 2.2.3 (*)

并且只要2.2.0(其中2.2.3被正式替换)就在那里,它就会恢复对旧版c3p0的依赖

+--- org.quartz-scheduler:quartz:2.2.3
|    +--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
|    \--- c3p0:c3p0:0.9.1.1

如果我从JesterJ中排除tika依赖,那么一切都会好起来的:

  compile('org.jesterj:injest:0.2-SNAPSHOT') {
    exclude group:"org.apache.tika"
  }

让我回到

+--- org.quartz-scheduler:quartz:2.2.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12

这看起来像是我的gradle中的一个错误,因为版本X的被Y替换的依赖项不应该将它们的依赖项添加到Y,而是依赖于Y来正确处理它自己的依赖项。

最终的解决方案是:

  1. 如果尝试在这种情况下排除c3p0(或类似情况下的其他lib),请查找正在替换应用程序中其他位置的依赖项的c3p0的父依赖项。
  2. 也从被替换的依赖项的父级中排除c3p0。
  3. 我将Tika排除在上面是太沉重了(我实际上需要它!)简约解决方案看起来像这样:(对于涉及的库)

      compile 'org.hibernate:hibernate-c3p0:4.3.11.Final'
      compile ('org.quartz-scheduler:quartz:2.2.3') {
        exclude group: 'c3p0'
      }
      compile 'org.quartz-scheduler:quartz-jobs:2.2.3'
      compile('org.jesterj:injest:0.2-SNAPSHOT') {
        exclude group:"c3p0"
      }