2014-12-09 1 views
1

우리는 현재 여러 애플리케이션에 대한 공유 라이브러리 인 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에 종속되지 않고 중지됩니다.

플러그인을 실행하는 동안 종속성 제외가 작동하는 이유는 누구나 알 수 있지만 플러그 인에 의존하는 응용 프로그램을 실행하는 동안에는 그렇지 않습니다.

답변

0

이것은 Maven/Aether 종속성 관리자 라이브러리의 변경 때문입니다. 아이비보다 버그가 적고 속도는 훨씬 빠르지 만 많은 사람들이 익숙했던 많은 기능이 빠져 있습니다. 쉬운 해결 방법 중 하나는 Ivy 해결 자로 다시 전환하는 것입니다. 게시 할 때 플러그인 할 때만 플러그인을 수행하면되지만, 필수 종속성 관리자가 무시할 내용을 알 수 있도록 예외가있는 무시 된 .pom 파일이 필요하므로 반드시 사용하지 않아도됩니다. Aether를 사용하는 경우 .pom 파일에는 종속성 만 포함됩니다.

EDIT : 나는 POM 파일의 정확성에 초점을 맞추었고, 이와 같은 코스 제외가 작동해야합니다. (모든 사용자가 올바른 수정을하고 더 나은 결과를 얻으려면 좋을지라도 말입니다.)

그룹이나 이름이 다를 수 있습니다 (예 : "캐시"대 "ehcache"). 그러면 다른 그룹을 퇴거/퇴출시킬 수 없습니다. 또는 항아리가 다른 종속성에서 온 것일 수 있으며 제외는 전역 적이 지 않습니다. 전역 제외를 설정할 수있는 방법이있을 수 있지만 문서를 모르는 경우는 없습니다.