Gradle 无法排除c3p0

Gradle 无法排除c3p0,gradle,dependencies,Gradle,Dependencies,我有以下渐变配置(基于): 我也试过: 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

我有以下渐变配置(基于):

我也试过:

  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文件中)


这是一个问题,因为hibernate libs引用0.9.2.1 c3p0,但它有一个不同的组(com.mchange),所以新版本的常规依赖项首选项不会发生。尽管已配置为在签出时验证连接,但仍有奇怪的closed语句连接池错误。抛出它的代码都是由JPA管理的,我不会在任何地方调用close。。。所以我想在这里清理c3p0,以确保它不会因为类路径上的混合版本而出现问题

这是你的全部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
jar列在
gradle dependencies
中;如上所述,我不知道。

这是你的整个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
jar列在
gradle dependencies
中;如上所述,我没有。

我发现了问题。我使用Michael Easter的裸体模板作为开始,并逐步添加内容。当我添加了对JesterJ的依赖时,问题又出现了。。。这导致了以下情况(省略了许多不相关的LIB):

一旦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
如果我将tika依赖项从JesterJ中排除,那么一切都会好起来:

  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中的一个bug,因为版本X中的依赖项(被Y取代)不应该将它们的依赖项添加到Y中,而是依赖Y来正确处理它自己的依赖项

最后的解决办法是:

  • 如果在这种情况下尝试排除c3p0(或类似情况下的另一个库),请查找c3p0的父依赖项,这些父依赖项正在替换应用程序中其他地方的依赖项
  • 也从替换的依赖项的父项中排除c3p0 我对上面提到的Tika的排斥太过严厉(我真的需要!)节俭的解决方案是这样的:(对于相关的库)


    我发现了问题。我使用Michael Easter的裸体模板作为开始,并逐步添加内容。当我添加了对JesterJ的依赖时,问题又出现了。。。这导致了以下情况(省略了许多不相关的LIB):

    一旦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
    
    如果我将tika依赖项从JesterJ中排除,那么一切都会好起来:

      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中的一个bug,因为版本X中的依赖项(被Y取代)不应该将它们的依赖项添加到Y中,而是依赖Y来正确处理它自己的依赖项

    最后的解决办法是:

  • 如果在这种情况下尝试排除c3p0(或类似情况下的另一个库),请查找c3p0的父依赖项,这些父依赖项正在替换应用程序中其他地方的依赖项
  • 也从替换的依赖项的父项中排除c3p0 我对上面提到的Tika的排斥太过严厉(我真的需要!)节俭的解决方案是这样的:(对于相关的库)