2013-06-19 18 views
6

Maven projesini Gradle'a taşıyorum. Ben bu hatayı alıyorumNot BağımlılığıManagement

def dependencyVersions = [ 
       'org.slf4j:slf4j-api' : '1.7.2', 
       'javax.inject:javax.inject' : '1', 
       'com.google.code.findbugs:annotations' : '2.0.1', 
       'com.typesafe:config' : '1.0.0', 
       'ch.qos.logback:logback-classic' : '1.0.9', 
       'com.google.guava:guava' : '14.0', 
       'com.google.inject:guice' : '3.0', 
       'com.google.inject.extensions:guice-multibindings' : '3.0', 
       'com.google.code.gson:gson' : '2.2.2', 
       'joda-time:joda-time' : '2.1', 
       'com.thoughtworks.paranamer:paranamer' : '2.5.2', 
       'org.codehaus.groovy:groovy-all' : '2.0.6', 
       'commons-validator:commons-validator': '1.4.0', 
       'org.apache.shiro:shiro-core' : '1.2.1', 
       'junit:junit-dep' : '4.10', 
       'org.mockito:mockito-core' : '1.9.5', 
       'org.hamcrest:hamcrest-core': '1.3', 
       'org.hamcrest:hamcrest-library': '1.3', 
       'org.unitils:unitils-core': '3.3' 
      ] 

configurations.all { 
    resolutionStrategy { 
     eachDependency { DependencyResolveDetails details -> 
     def version = dependencyVersions["$details.requested.group:$details.requested.name"] 
     if (version != null) 
      details.useVersion version 
     } 
    } 
} 

ama Gradle çalıştığınızda şimdi (yerel Maven depo içine) yükleyin: Ben bağımlılıkları yönetmek gerekli öylesine gibi resolutionStrategy uğraş

Execution failed for task ':counter-module:install'. 

Could not publish configuration 'archives' Unable to initialize POM pom-default.xml: Failed to validate POM for project lt.counter at /home/workspace/counter/counter-module/build/poms/pom-default.xml

+0

Bunun için şuna inanıyorum: http://stackoverflow.com/questions/9547170/in-gradle-how-do-i-declare-common-dependencies-in-a-single-place It soru başlığı tam metin için stackoverflow ararken üçüncü öğe oldu ... –

+0

Ama bu şekilde bağımlılık sürüm N kullanıyorsanız, tam sürümünü kullanmak için zorlamaz ve diğer bağımlılık bağımlılık sürümü N- 1 Çatışacağım. Tüm bağımlılarım N versiyonunu kullanmaya zorlamam gerekiyor. – IowA

+0

Ah, anlıyorum. Evet, harita tekniği kolaylık ve DRY için gerçekten daha fazla. Eğer devrelerine güvenemiyorsanız (ve kim olabilir ?: P), denediğiniz gibi bağımlılık çözümü isteyeceksiniz. Maalesef bununla ilk elden deneyimim yok. –

cevap

4

Sorununuzun bir yönü hala eksik olabilir, ancak dokümanlardaki bir şeyi fark ettim. Gözlerimi için

def dependencyVersions = [ 
      'org.slf4j:slf4j-api' : '1.7.2', 
      'javax.inject:javax.inject' : '1', 
      'com.google.code.findbugs:annotations' : '2.0.1', 
      'com.typesafe:config' : '1.0.0', 
      'ch.qos.logback:logback-classic' : '1.0.9', 
      'com.google.guava:guava' : '14.0', 
      'com.google.inject:guice' : '3.0', 
      'com.google.inject.extensions:guice-multibindings' : '3.0', 
      'com.google.code.gson:gson' : '2.2.2', 
      'joda-time:joda-time' : '2.1', 
      'com.thoughtworks.paranamer:paranamer' : '2.5.2', 
      'org.codehaus.groovy:groovy-all' : '2.0.6', 
      'commons-validator:commons-validator': '1.4.0', 
      'org.apache.shiro:shiro-core' : '1.2.1', 
      'junit:junit-dep' : '4.10', 
      'org.mockito:mockito-core' : '1.9.5', 
      'org.hamcrest:hamcrest-core': '1.3', 
      'org.hamcrest:hamcrest-library': '1.3', 
      'org.unitils:unitils-core': '3.3' 
     ] 

force dependencyVersion.collect {k, v -> "$k:$v"} 

bu iki ilkeyi gerçekleştirmek olacak gibi görünüyor,: Aşağıdaki yapabileceği gibi

// force certain versions of dependencies (including transitive) 
// *append new forced modules: 
force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4' 
// *replace existing forced modules with new ones: 
forcedModules = ['asm:asm-all:3.3.1'] 

görünüyor.

  1. Kullanıcılara, güzel oynatmak istediklerinde ve önceden belirlediğiniz sürümle dep eklediklerinde kullanmak için güzel bir harita gösterimi verin.
  2. Zorlanmaya çalıştıklarında önceden belirlenen sürümü kullanmaları için bunları zorlayın.
+0

Sorun şu ki Maven eklentisi varsayılan-pom.xml üretiyor ve sürümleri görmüyor. Ve daha sonra herhangi bir bağımlılık sürümleri olmayan pom pompayı doğrulamaya çalışırken başarısız olur. – IowA

+0

Cevabım ve yorumum arasındaki açık bağlantıyı göremiyorum. (Belki benim için çok erken?: P) Sorunuzdaki hata mesajının artifakt oluşumu (pom porsiyonu) ve bağımlılık çözümü olmayan bir konu olduğu ortaya çıkıyor mu? –

0

varsayılan çözünürlüğü Gradle için strateji en yeni sürümü kullanmaktır, bu yüzden N versiyonu kullanılacaktır; sürüm N-1 olmaz.

Kullanmakta olduğunuz Grapli sürümünü ve proje (ler) inizin tam yapısını bize söylemezsiniz. Çok projeli bir yapı mı yapıyorsunuz?

Ayrıca, özel çözünürlük stratejinizi anlamıyorum - bu sürüm neden boş olabilir?

- düzenle -

yeni sürümü varsayılan çözünürlüğü strateji, yani karşılaşılan yüksek sürüm kullanılacaktır.

Belki de belirli bir sürümü zorlamak gibi, Gradle's examples on custom resolution strategies'a bir göz atın.

+0

Evet, bu çok modüllü bir yapıdır. Gradle 1.6 kullanıyorum. Ve bu sadece N ve N-1 için değil, bazı bağımlılıklar N + 1'e bağlıysa ne olacak? Gradle, tüm Bağımlılıklar için N + 1 sürümünü kullanacak mı? – IowA

+0

Sonlu bağımlılıklar haritasından çıktı aldığından beri, belirli bir sürümünün olmadığı bir bağımlılığı çözerken sürümün boş olacağını varsayardım. –