우리는 현재 여러 애플리케이션에 대한 공유 라이브러리 인 Grails 플러그인을 개발 중입니다. 이 플러그인은 GORM과 캐싱에 대한 관리를 수행하며, 따라서 Hibernate 플러그인과 cache 및 cache-ehcache 플러그인을 모두 포함합니다. Hibernate와 cache-ehcache 플러그인은 모두 ehcache-core jar 의존성을 가져오고 싶지만 다른 버전을 가지고있다.Grails 2.4 전이 플러그인 의존성은 'exclude'지시어를 준수하지 않습니다.
compile(':hibernate:3.6.10.10', { excludes 'ehcache-core' })
compile ':cache:1.1.8'
compile ":cache-ehcache:1.0.4"
이에서 테스트 실행 플러그 - 인은 모든 것이 작동합니다 내가 원하는으로 Ehcache 코어의 버전과 같이 캐시-으로 Ehcache 플러그인 그래서 구성한 내 BuildConfig.groovy의 하나입니다 벌금. 그러나이 플러그인을 내 실제 응용 프로그램 중 하나에 포함 시키면 excludes 지시문이 무시 된 것처럼 보이고 hibernate 플러그인에 대한 전이 의존성이 ehcache-core를 시작합니다. ehcache-core의 두 가지 버전을 사용하면 다양한 측면을 해결할 수 있습니다.
내 응용 프로그램에 대한 grails dependency-report를 확인했는데 내 응용 프로그램 -> 내 유틸리티 플러그인 -> 최대 절전 모드 플러그인 -> ehcache-core 그대로의 종속성 체인을 보여줍니다. 플러그인 자체에서 실행되는 동일한 종속성 보고서는 최대 절전 모드 플러그 인을 가리킨 다음 ehcache-core에 종속되지 않고 중지됩니다.
플러그인을 실행하는 동안 종속성 제외가 작동하는 이유는 누구나 알 수 있지만 플러그 인에 의존하는 응용 프로그램을 실행하는 동안에는 그렇지 않습니다.