2013-06-19 10 views
6

मैं मैवेन प्रोजेक्ट को ग्रैडल में माइग्रेट कर रहा हूं। मैं निर्भरता प्रबंधन की जरूरत तो इसलिए की तरह resolutionStrategy tryed:ग्रैडल निर्भरता प्रबंधन

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 
     } 
    } 
} 

लेकिन (स्थानीय Maven भंडार में) अब जब मैं Gradle करने की कोशिश स्थापित मैं यह त्रुटि हो रही है:

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

मेरा मानना ​​है कि आप इस के लिए देख रहे: http://stackoverflow.com/questions/9547170/in-gradle-how-do-i-declare-common-dependencies-in-a-single-place यह आपके प्रश्न शीर्षक के सटीक पाठ के लिए स्टैक ओवरफ्लो खोजते समय तीसरा आइटम था ... –

+0

लेकिन यदि आप निर्भरता संस्करण एन का उपयोग कर रहे हैं, तो इस तरह से सटीक संस्करण का उपयोग करने के लिए मजबूर नहीं होता है, और मेरी अन्य निर्भरता निर्भरता संस्करण एन- 1 मुझे संघर्ष मिलेगा। मुझे अपनी सभी निर्भरताओं को एन संस्करण का उपयोग करने की आवश्यकता है। – IowA

+0

आह, मैं देखता हूं। हां, मानचित्र तकनीक सुविधा और DRY के लिए वास्तव में अधिक है। यदि आप अपने देवताओं पर भरोसा नहीं कर सकते (और कौन कर सकता है?: पी) आप निर्भरता संकल्प चाहते हैं, जैसा कि आप कोशिश कर रहे हैं। दुर्भाग्य से मेरे पास इसके साथ पहले से अनुभव नहीं है। –

उत्तर

4

मुझे अभी भी आपकी समस्या का एक पहलू याद आ रहा है, लेकिन मैंने दस्तावेज़ों में कुछ देखा है।

// 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'] 

लगता है की तरह आप निम्न कर सकता है:

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"} 
मेरी आँखों के लिए

, इस तरह दो सिद्धांतों हासिल करेगी यह लग रहा।

  1. उपयोगकर्ताओं को अच्छा प्रदर्शन करना चाहते हैं और अपने पूर्व निर्धारित संस्करण के साथ एक डिप्टी जोड़ने के लिए उपयोगकर्ताओं को एक अच्छा नक्शा नोटेशन दें।
  2. किसी भी समय मुश्किल होने की कोशिश करते समय उन्हें पूर्व निर्धारित संस्करण का उपयोग करने के लिए मजबूर करें।
+0

समस्या यह है कि Maven प्लगइन डिफ़ॉल्ट-pom.xml उत्पन्न कर रहा है और यह संस्करण नहीं देखता है। और फिर यह उस पोम को सत्यापित करने का प्रयास करते समय विफल रहता है जिसमें कोई निर्भरता संस्करण नहीं है – IowA

+0

मुझे अपने उत्तर और आपकी टिप्पणी के बीच स्पष्ट कनेक्शन दिखाई नहीं देता है। (शायद मेरे लिए बहुत जल्दी?: पी) क्या आप कह रहे हैं कि आपके प्रश्न से त्रुटि संदेश आर्टिफैक्ट पीढ़ी (पोम भाग) और निर्भरता संकल्प के साथ कोई मुद्दा नहीं है? –

0

डिफ़ॉल्ट संकल्प ग्रैडल के लिए रणनीति नवीनतम संस्करण का उपयोग करना है, इसलिए संस्करण एन का उपयोग किया जाएगा; संस्करण एन -1 नहीं होगा।

आप हमें नहीं बताते कि आप किस ग्रैडल का उपयोग कर रहे हैं और आपकी परियोजना की पूरी संरचना है। क्या आप एक बहु-परियोजना निर्माण कर रहे हैं?

इसके अलावा मैं आपकी कस्टम रिज़ॉल्यूशन रणनीति को समझ नहीं पा रहा हूं - संस्करण कभी भी शून्य क्यों होगा?

- संपादन -

नवीनतम संस्करण डिफ़ॉल्ट संकल्प रणनीति है, इसलिए उच्चतम संस्करण का सामना करना पड़ा इस्तेमाल किया जाएगा।

शायद Gradle's examples on custom resolution strategies पर एक नज़र डालें, जैसे किसी विशेष संस्करण को मजबूर करना।

+0

हां यह बहु मॉड्यूल निर्माण है। मैं Gradle 1.6 का उपयोग कर रहा हूँ। और यह केवल एन और एन -1 के लिए ही नहीं है, लेकिन कुछ निर्भरता एन + 1 पर निर्भर करती है तो क्या होगा? Gradle सभी निर्भरताओं के लिए एन + 1 संस्करण का उपयोग करने के बजाय? – IowA

+0

चूंकि वह (वह है?) सीमित निर्भरताओं के मानचित्र से संस्करण प्राप्त कर रहा है, मुझे लगता है कि एक निर्भरता को हल करते समय संस्करण शून्य होगा, उसके पास कोई विशिष्ट संस्करण सेट नहीं है। –

संबंधित मुद्दे