Как заставить Maven использовать Ehcache 2.2.0 с Hibernate 3.3.2GA?

Предполагая, что они совместимы, как я могу заставить Maven 2 использовать Ehcache 2.2 .0 вместо Ehcache 1.2.3 с Спящий режим 3.3.2.GA?

По сути, я хочу заменить загадочную и практически циклическую цепочку зависимостей

с участием

Обновление:

Я узнал, что hibernate-commons-annotations-3.3.0.ga также зависит от артефакта ehcache-1.2.3:

[INFO] +- org.hibernate:hibernate-commons-annotations:jar:3.3.0.ga:compile
[INFO] |  +- org.hibernate:hibernate:jar:3.2.1.ga:compile
[INFO] |  |  +- net.sf.ehcache:ehcache:jar:1.2.3:compile
[INFO] |  |  +- asm:asm-attrs:jar:1.5.3:compile
[INFO] |  |  +- cglib:cglib:jar:2.1_3:compile
[INFO] |  |  \- asm:asm:jar:1.5.3:compile
[INFO] |  \- javax.persistence:persistence-api:jar:1.0:compile

Какова цель hibernate-commons-annotations-3.3.0.ga? Нужен ли Hibernate этот артефакт, если он использует hibernate-annotations-3.2.1-ga? Есть ли замена этому артефакту, не включающая Ehcache? Должен ли я просто попытаться исключить его из сборки?


person Derek Mahar    schedule 24.08.2010    source источник
comment
Кажется, что hibernate-commons-annotations-3.3.0.ga.jar зависит от монолитного hibernate-3.2.1.ga.jar, который в то время имел зависимость от ehcache. Я не использую эти зависимости, я завишу только от hibernate-entitymanager-3.4.0.GA.jar. Я покажу свою помпу и дерево зависимостей.   -  person Pascal Thivent    schedule 27.08.2010
comment
Но какие бы зависимости вы ни использовали, вы всегда можете их исключить.   -  person Pascal Thivent    schedule 27.08.2010


Ответы (2)


Предполагая, что они совместимы, как я могу заставить Maven 2 использовать Hibernate 3.3.2.GA с Ehcache 2.2.0? Согласно их соответствующим файлам Maven POM:

Я исследовал этот вопрос для своих личных нужд, и теперь у меня есть конкретные ответы. Вся необходимая информация доступна в Интернете, и я просто публикую очень короткую версию как использовать Ehcache 2.x с Hibernate 3.3+.

Во-первых, вам нужно объявить зависимость от артефакта ehcache.

<dependency>
  <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>2.2.0</version>
  <type>pom</type>
</dependency>

Затем настройте Hibernate для кэширования второго уровня и укажите провайдера кэширования второго уровня:

<property key="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>

Важно отметить:

  • we are using the property for the new Hibernate 3.3/3.5 SPI (that Ehcache 2.0+ supports)
    • hibernate.cache.region.factory_class
  • we are using the cache provider provided by Echache
    • net.sf.ehcache.hibernate.EhCacheRegionFactory (and not o.h.c.EhCacheProvider)

Так что на самом деле вам просто не нужен артефакт hibernate-ehcache - и это решает весь вопрос :) Вот точные (соответствующие) зависимости, которые я использую:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>3.4.0.GA</version>
</dependency>
<dependency>
  <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>2.2.0</version>
  <type>pom</type>
</dependency>

И дерево:

[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile
[INFO] |  +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile
[INFO] |  +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  |  \- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.5.10:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- javax.transaction:jta:jar:1.1:compile
[INFO] |  \- javassist:javassist:jar:3.4.GA:compile
[INFO] +- ch.qos.logback:logback-classic:jar:0.9.18:compile
[INFO] |  \- ch.qos.logback:logback-core:jar:0.9.18:compile
[INFO] \- net.sf.ehcache:ehcache:pom:2.2.0:compile
[INFO]    +- net.sf.ehcache:ehcache-core:jar:2.2.0:compile
[INFO]    +- net.sf.ehcache:ehcache-terracotta:jar:2.2.0:compile
[INFO]    \- org.terracotta:terracotta-toolkit-1.0-runtime:jar:1.0.0:compile

Дополнительные сведения, примеры конфигурации ehcache, официальную документацию см. по ссылкам ниже.

Ресурсы

person Pascal Thivent    schedule 24.08.2010
comment
Спасибо за подробный ответ! - person Derek Mahar; 25.08.2010
comment
Я понимаю! Попробую и сообщу о своих результатах. Это также относится к Hibernate 3.5+? - person Derek Mahar; 26.08.2010
comment
Я перечитал ваш ответ и заметил, что ваша первая заметка предполагает, что это решение также работает для Hibernate 3.5+. - person Derek Mahar; 26.08.2010
comment
@Derek Да, это так, как указано в первой заметке :) - person Pascal Thivent; 26.08.2010
comment
Паскаль, я обнаружил, что артефакт hibernate-commons-annotations-3.3.0.ga также тянет ehcache-1.2.3 (см. обновление в моем вопросе). - person Derek Mahar; 27.08.2010
comment
Вот обновленный URL-адрес для Обновления с версий Ehcache до 2.0. @Pascal, я пытался отредактировать ваш ответ, но SO жаловался на неправильный отступ кода, и я не смог это исправить. - person pharsicle; 27.03.2013

Вы можете исключить зависимость Ehcache 1.2.3, используя элемент «исключить», см. http://maven.apache.org/guides/introduction/introduction-to-Optional-and-excludes-dependencies.html, раздел Исключения зависимостей. Но я не знаю, работает ли это. Я не знаю, совместим ли Ehcache с 1.2.3. Номер версии говорит о том, что это не так. Но с помощью «исключить» вы можете легко удалить зависимости Ehcache 1.2.3 и 1.5.0.

person Skarab    schedule 24.08.2010
comment
Я использовал элемент <exclusions/>, чтобы исключить ehcache-1.2.3 из списка зависимостей для hibernate-commons-annotations-3.3.0.ga, так как я думаю, что аннотации Hibernate требуют этого артефакта. - person Derek Mahar; 27.08.2010