2016-07-26 4 views
1

나는이 개 프로젝트는 Gradle을 의존성 관리를 사용하게 IntelliJ IDEA 2016에서 편집 한 :Gradle을 종속성 관리 - 이적 종속성 버전 잘못된

: 프로젝트 A와 프로젝트 B를

프로젝트 A는 같은 elasticsearch에 대한 컴파일 범위 의존성을 정의

compile 'com.mycompany:elasticsearch-common:2.3.1' 

내가 기대, 인텔리의 Gradle을 도구 창에서 :

compile 'org.elasticsearch:elasticsearch:2.3.1' 

프로젝트 B는 그래서 프로젝트 A에 대한 컴파일 범위 의존성을 선언 프로젝트 B에 대한 J의 IDEA 2016, 볼 수 있습니다 :

... 
com.mycompany:elasticsearch-common:2.3.1 (Compile) 
    org.elasticsearch:elasticsearch:2.3.1 (Compile) 
... 

대신 나는 참조 : 그것은 또 다른 의존성 선언에 의해 무시하지 그래서

... 
com.mycompany:elasticsearch-common:2.3.1 (Compile) 
    org.elasticsearch:elasticsearch:1.5.2 (Compile) 
... 

프로젝트 B에 다른 의존성, elasticsearch에 따라 달라집니다.

<dependency> 
    <groupId>org.elasticsearch</groupId> 
    <artifactId>elasticsearch</artifactId> 
    <version>2.3.1</version> 
    <scope>compile</scope> 
</dependency> 

가 왜 인 IntelliJ가 1.5.2 인 것으로 elasticsearch의 전이 버전을보고 :

사실, 프로젝트 A에 대한 우리의 넥서스에 pom.xml 파일이있다? 나는 무엇을 시도했다

:

  1. 가 Gradle을 캐시 삭제 프로젝트 B 디렉토리 내부 .idea 및 .gradle 삭제
  2. 마시는 많은 욕설
  3. 캐시를 무효화하고 IntelliJ를
  4. 에서 다시 시작 차
  5. 친구와 동료들에게 물어보기
  6. 이메일 전송 오프라
  7. 이 모든 (지금은 더 이상 IS)
  8. (5 관련) 화장실에 가서 희망 난 다시

을받을 때 마술 자체를 해결 잘 때 인 IntelliJ (15)로 되돌리기 위의 작업은 없습니다.

프로젝트 B에서 특별히 elasticsearch:2.3.1 종속성을 지정하는 작업은 수행하지만, 전 이적 종속성에 대한 전체 이유를 무효화하지는 않습니까?

도움을 주시면 감사하겠습니다. 코멘트에 LanceJava에 의해 제안

업데이트 1
, 나는 무슨 일이 일어 났는지 볼 gradle dependencies을 달렸다.

이것은 구체적으로 다운 그레이드 있다고 보여줍니다

:dependencyInsight 
com.mycompany:elasticsearch-common:2.3.1 (selected by rule) 
\--- compile 

org.elasticsearch:elasticsearch:1.5.2 (selected by rule) 

org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2 
\--- com.mycompany:elasticsearch-common:2.3.1 
    \--- compile 

누구나 이런 일이 왜 어떤 아이디어가 : 내가 생각 해낸 그 의존성에 Gradle을 dependencyInsight를 실행

org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2 

?

업데이트 2이 답이 보인다
: https://discuss.gradle.org/t/excluded-dependence-comes-back-when-spring-boot-plugin-is-applied/17945/2

Gradle을 봄 부팅 플러그인이 조금 인수하고 아니에요에도 불구하고 (자신의 의존성 버전의 시행을 좋아하는 것 같다을 스프링 데이터를 사용하는 스프링 부트 스타터 사용).

나는 추가하여이 고정 : 내 build.gradle 파일에

ext[elasticsearch.version] = '2.3.1' 

.

+1

'gradle dependencies' fom 명령 줄을 사용해보십시오. 무슨 일이 일어나는지 말해 줄 것입니다. 아마도 사용자 정의 [ResolutionStrategy]가 있습니다 (https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html) –

+0

@ LanceJava 감사합니다!나는 이것을했고 구체적으로 등급을 낮추는 것처럼 보입니다 : org.elasticsearch : elasticsearch : 2.3.1 -> 1.5.2 dependencyInsight를했을 때 다음과 같이 나타났습니다. org.elasticsearch : elasticsearch : 1.5.2 (선택됨) 규칙에 따라) org.elasticsearch : elasticsearch : 2.3.1 -> 1.5.2 \ --- com.mycompany : elasticsearch-common : 2.3.1 \ --- runtime – ndtreviv

+0

@LanceJava 업데이트를 확인하십시오. – ndtreviv

답변

2

질문에서 분명하지 않은 점은이 프로젝트가 특정 버전의 라이브러리를 적용하는 spring-bootgradle plugin을 사용하고 있었고 스프링 데이터 요구 사항과 일치하도록 elasicsearch 버전을 강제로 낮추었습니다 (내 프로젝트에서 스프링 데이터를 사용하지는 않았지만).

나는 실행하여이 문제를 발견 :

org.elasticsearch:elasticsearch:1.5.2 (selected by rule) 

org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2 
    \--- com.mycompany:elasticsearch-common:2.3.1 
     \--- runtime 

내가 (selected by rule) 부분은 뭔가 프로그래밍 방식으로 특정 버전을 선택하는 것을 의미 사실을 알게 :

gradle dependencyInsight --dependency elasticsearch --configuration compile 

당시로 나왔다있다. 그것은 그것을 플러그인으로 좁혔습니다.

난 단지 인, 4 플러그인을 사용하고 있었다 :

  1. 자바
  2. 받는다는
  3. 생각
  4. 봄 부팅

내가 다른 곳에서 사용하지 않은 유일한 플러그인 (따라서이 문제는 다른 곳에서도 발생하지 않았다) spring-boot이었다.

일단이 플러그인을 주석 처리하면 종속성이 올바른지 알 수 있습니다.

ext[elasticsearch.version] = '2.3.1' 

결과 순위 :

는이 시점에서 나는 명시 적으로 내가하여 사용할 원하는 버전을 지정할 필요가 있다고 배웠습니다. 나를 위해 더 많은 차!