2017-02-04 5 views
0

У меня есть следующие Gradle конфигурации (на основе the docs):Невозможно исключить c3p0

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 

, когда я перечисляю зависимости (и банка появляется в моем военном файле).

------------------------------------------------------------ 
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, я не звоню нигде ... Итак, я хочу, чтобы очистить c3p0 здесь, чтобы убедиться, что это не проблема, связанная с смешанными версиями в пути класса.

ответ

0

Я нашел проблему. Я использовал шаблон голой кости Михаэля Пасхи в качестве начального и постепенно добавленного материала. Проблема возвращается, когда я добавил зависимость от JesterJ ... Это приводит к этому (много нерелевантных LIBS опущены):

+--- 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 то все нормально снова:

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

получает меня обратно в

Это выглядит как ошибка в градиенте для меня, поскольку зависимости от версии X, которые заменены на Y, не должны добавлять свои зависимости к Y, а скорее полагаться на Y, чтобы правильно обрабатывать собственные зависимости.

Окончательное решение:

  1. Если попытка исключить C3P0 в такой ситуации, как это, (или любую другую библиотеку в аналогичной ситуации) ищет родительских зависимостей C3P0, которые заменяют зависимости в любом месте приложения.
  2. Исключить c3p0 из родителя замененной зависимости.

Мое исключение Тики выше слишком тяжело (мне это действительно нужно!) Парсимонное решение выглядит следующим образом: (для библиотек, участвующих)

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" 
    } 
+1

Filed https://github.com/gradle/gradle/issues/1342 – Gus

+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; как и выше, я этого не делаю.

+0

Спасибо это помогло (отсюда upvote) – Gus