首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法排除c3p0

无法排除c3p0
EN

Stack Overflow用户
提问于 2017-02-04 20:54:31
回答 2查看 794关注 0票数 0

我有以下的gradle配置(基于医生们):

代码语言:javascript
复制
  compile ('org.quartz-scheduler:quartz:2.2.3') {
    exclude group: 'c3p0'
  }
  compile ('org.quartz-scheduler:quartz-jobs:2.2.3') {
    exclude group: 'c3p0'
  }

我也试过:

代码语言:javascript
复制
  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'
  }

但我仍然得到

代码语言:javascript
复制
+--- 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文件中)。

代码语言:javascript
复制
------------------------------------------------------------
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库引用了0.9.2.1 c3p0,但是它有一个不同的组(com.mchange),因此没有出现新版本的常规依赖偏好。我有奇怪的关闭语句连接池错误,尽管已配置为在签出时验证连接。抛出它的代码都是由JPA管理的,我在任何地方都不叫close .因此,我希望在这里清理c3p0,以确保它不是类路径上的混合版本造成的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-07 00:06:58

我发现了问题。我用迈克尔·复活节的裸骨模板作为开始,并逐渐增加了一些东西。当我在JesterJ上添加一个依赖项时,问题又出现了.这导致了这样的结果(许多无关的谎言被省略了):

代码语言:javascript
复制
+--- 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的依赖。

代码语言:javascript
复制
+--- 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依赖项,那么一切都很好:

代码语言:javascript
复制
  compile('org.jesterj:injest:0.2-SNAPSHOT') {
    exclude group:"org.apache.tika"
  }

让我回到

代码语言:javascript
复制
+--- org.quartz-scheduler:quartz:2.2.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12

在我看来,这就像gradle中的一个bug,因为由Y代替的X版本的依赖项不应该添加到Y中,而应该依赖Y来正确处理它自己的依赖项。

最后的解决办法是:

  1. 如果试图在这种情况下排除c3p0 (或类似情况下的另一个库),请查找c3p0的父依赖项,这些依赖项正在替换应用程序中其他地方的依赖项。
  2. 从替换的依赖项的父级中也排除c3p0。

我对Tika的排斥太重了(我真的需要那个!)简洁的解决方案如下所示:(对于所涉及的库)

代码语言:javascript
复制
  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"
  }
票数 0
EN

Stack Overflow用户

发布于 2017-02-05 01:30:11

那是你的全部格列德尔文件吗?使用Gradle 3.3,这对我来说是可行的:

代码语言:javascript
复制
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中列出;正如上面所示,我没有。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42045497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档