2014-02-10 3 views
3

나는 다음과 같은 종속 구조의 Gradle을 프로젝트가 제외되지 않습니다. 그것이 (내가 이야기하고 정확한 라이브러리를 제공 할 수 있지만, 내 질문에 무관의) other:transitive:1.1와 런타임에 충돌과 수동으로 제외해야하므로 그룹 ID 및 이슈 ID가 다른 때문입니다Gradle을 생각 플러그인 제외 이적 의존성은

configurations.all { 
    exclude group: 'some', module: 'transitive', version: '2.1' 
} 

종속성이 올바르게 제외되었습니다 (dependencyInsight 작업을 실행하여 알 수 있습니다). 내가 런타임 충돌을 트리거 할 some:other:1.0에서 코드를 사용 module2에서 테스트를 작성하는 경우 단지는 제외되어 있기 때문에, 그것은 Gradle을을 사용하여 성공적으로 실행됩니다 :

gradle :module2:test -Dtest.single=SomeTest 

지금은 인 IntelliJ (12)를 사용하고 (그래서 가난한 Gradle을 통합) 그리고 Gradle idea 플러그인을 사용하여 .ipr 및 .iml 파일을 생성합니다. 모든 것이 잘 작동합니다.

그러나 IDE에서 SomeTest을 실행하면 위에서 언급 한 충돌로 인해 런타임 충돌이 발생합니다.

-classpath ...:/path/to/jar/some/transitive/2.1/some-transitive-2.1.jar:... 

가 그래서 내 질문이있다 : 나는이 전이 종속성을 추가하는 IntelliJ를 방지 할 방법이 가정되지 않은 IDE 테스트 클래스 경로를 보면 나는 그것이 사실은 (다른 사람의 사이에서) 제외 된 단지를 포함 참조 ? 그냥 완전성에 대한

, 여기 (가 부적절 비록이 토론) 제가 이야기 충돌의 저지와 ASM 4.1 (뉴저지 간의 비 호환성으로 인해 발생

java.lang.IncompatibleClassChangeError: Implementing class 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875) 
    at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840) 
    at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171) 
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144) 
    at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:272) 
    at org.glassfish.jersey.test.JerseyTest.<init>(JerseyTest.java:142) 
    at com.mypackage.rest.SomeTest.<init>(RestServiceTest.java:19) 

는 3.3.1을 사용하는 서로 다른 그룹 id를 가짐)은 다른 모듈로부터 가져온 전이 의존성이다.

IDEA 13은 Gradle 통합 기능이 훨씬 뛰어나다는 것을 알고 있지만 (a) 12 개 라이센스가 있으며 모든 개발팀을 곧 업그레이드하지는 않습니다. (b) IDEA 13에는 여전히 몇 가지 문제가 있습니다. polyglot Gradle 프로젝트 (Java/Scala)이므로 빌에 맞지 않습니다.

답변

0

Maven 종속성에 대한 모든 전이 의존성을 제외하지만 필요한 모든 라이브러리를 명시 적으로 추가하십시오. 'some : transitive : 2.1'을 제외하고는 코드없이 코드를 실행할 수 있다고 가정합니다.

group:'some', name:'dependency', version:'1.0' { 
    transitive = false 
} 
// add required transitive libraries here 

또한 최신 버전의 Gradle로 원본 코드를 실행 해보십시오.

+0

불행히도 내가 허용 할이 작품을 누구나 확인할 수 있다면 더 이상 Gradle을 사용하지 않을 것입니다. 감사! –

+0

이것은 작동하지 않습니다. 저는 방금 OP 2.3과 비슷한 설치에서 Gradle 2.3과 Intellij IDEA 14.1.2를 확인했습니다. –