গ্রেডলে আমি কীভাবে একক জায়গায় সাধারণ নির্ভরতা ঘোষণা করব?


109

মাভেনে একটি খুব দরকারী বৈশিষ্ট্য রয়েছে যখন আপনি <dependencyManagement>প্যারেন্ট পিওএম এর বিভাগে নির্ভরতা নির্ধারণ করতে পারেন এবং সংস্করণ বা ক্ষেত্র বা যা কিছু যা উল্লেখ না করে শিশু মডিউলগুলির উপর নির্ভরতা নির্ধারণ করতে পারেন ।

গ্রেডলে বিকল্পগুলি কী কী?

উত্তর:


179

আপনি প্যারেন্ট স্ক্রিপ্টে সাধারণ নির্ভরতা ঘোষণা করতে পারেন:

ext.libraries = [ // Groovy map literal
    spring_core: "org.springframework:spring-core:3.1",
    junit: "junit:junit:4.10"
]

চাইল্ড স্ক্রিপ্ট থেকে আপনি এরপরে নির্ভরতা ঘোষণাগুলি ব্যবহার করতে পারেন:

dependencies {
    compile libraries.spring_core
    testCompile libraries.junit
}

উন্নত কনফিগারেশন বিকল্পগুলির সাথে নির্ভরতা ঘোষণাগুলি ভাগ করতে আপনি ব্যবহার করতে পারেন DependencyHandler.create:

libraries = [
    spring_core: dependencies.create("org.springframework:spring-core:3.1") {
        exclude module: "commons-logging"
        force = true
    }
]

একাধিক নির্ভরতা একই নামে ভাগ করা যেতে পারে:

libraries = [
    spring: [ // Groovy list literal
        "org.springframework:spring-core:3.1", 
        "org.springframework:spring-jdbc:3.1"
    ]
]

dependencies { compile libraries.spring } তারপরে একই সাথে উভয় নির্ভরতা যুক্ত করবে।

আপনি এই ফ্যাশনে যে তথ্য ভাগ করতে পারবেন না সেটি হ'ল কোন কনফিগারেশন ( ম্যাভেনের শর্তে স্কোপ ) নির্ভরতা নির্ধারণ করা উচিত। যাইহোক, আমার অভিজ্ঞতা থেকে যাই হোক না কেন এটি সম্পর্কে পরিষ্কার করা ভাল।


3
ধন্যবাদ, এটি আমার প্রশ্নটির সমাধান করে, তবে তবুও উদ্বেগের বিষয় আছে যদিও .. মাভেনের মধ্যে আমরা সংস্করণটি খালি রাখতে পারি এবং যদি এটি একটি লিবিস হয় তবে এটি সুবিধাজনক কারণ আপনি এটি আমাদের অ্যাপ্লিকেশনটিতে ব্যবহার করতে পারেন এবং নির্ভরতা পরিচালনা করতে পারেন লাইবের কোন সংস্করণটি সংজ্ঞায়িত করতে এটা নেওয়া উচিত। গ্র্যাডলের সাথে আপনি কীভাবে এমনটি করবেন?
স্টানিস্লাভ বাশকির্তসেভ

আমি প্রশ্নটি বুঝতে পারি না। একটি উদাহরণ প্রদান করুন।
পিটার নিডারউইজার 13

4
পিটার, সিটিপোপপ যা বলছে তা হ'ল মেভেনের মধ্যে আপনি নির্ভরতা ব্যবস্থাপনা বিভাগে পিতা-মাতার (বা এগ্রিগেটর) পমের সংস্করণ (এবং স্কোপ) সহ নির্ভরতা ঘোষণা করতে পারেন। তারপরে "কংক্রিট" পমে, আপনার সংস্করণটি পুনরায় ঘোষণা করার দরকার নেই; শুধু আর্টিক্যাক্ট এবং গ্রুপআইডি। মূলত এটি ম্যাভেনকে বলে "আমার এক্স দরকার: ওয়াই, তবে পিতা-মাতা কনফিগার করেছেন যা সংস্করণ ব্যবহার করুন" "
মাইকেল ক্যাম্পবেল

2
অনুলিপি এই ধরনের সমস্যা এড়ানোর জন্য, আমি একটি পৃথক তৈরি করতে ঝোঁক dependencies.gradleস্ক্রিপ্ট যেখানে আমি বৈশিষ্ট্য, যেমন যেমন আমার সমস্ত নির্ভরতা সংজ্ঞায়িত: ext.GROOVY = 'org.codehaus.groovy:groovy-all:2.1.6'। মূল প্রকল্পে build.gradleআমি অন্তর্ভুক্ত করি allprojects { apply from: "$rootDir/dependencies.gradle" }। তারপরে সমস্ত নির্ভরতাগুলি সেগুলির চারপাশে ছড়িয়ে দেওয়ার পরিবর্তে একটি ফাইলে সংজ্ঞায়িত করা হয় এবং নির্ভরতা কনফিগারেশনে আরও "পড়তে সহজ" ধ্রুবক ব্যবহার করা হয়।
স্টেইনার

1
আমি ঠিক উপরে এটি করেছি। আপনাকে আবেদনের দরকার নেই allprojectsকারণ প্রকল্প-স্তরের অতিরিক্ত সম্পত্তি সাব-প্রকল্পগুলিতে দৃশ্যমান।
পিটার নিডারভিজার

7

এটি দেরি করে দেওয়া জবাব, তবুও আপনি এগুলি দেখতে চাইবেন: http://plugins.gradle.org/plugin/io.spring.d dependency-management এটি কোনও 'বোম' আমদানি করার সম্ভাবনা সরবরাহ করে এবং সংজ্ঞাগুলি পুনরায় ব্যবহার করে 'বোম' সংজ্ঞায়িত ধীরে ধীরে ম্যাভেন থেকে গ্রেডে স্থানান্তরিত করার সময় এটি অবশ্যই একটি দুর্দান্ত সহায়তা! এখনই এটি উপভোগ করছি।


আপনি একাধিক (বহু) প্রকল্প জুড়ে একই নির্ভরতা ভাগ করতে চাইলে এটি অবশ্যই আবশ্যক।
রুমস্

7
সুবিধাজনক হলেও এই প্লাগইনটিতে উল্লেখযোগ্য পারফরম্যান্সের ছাপ থাকতে পারে। 200+ নির্ভরতা সহ 30 টি সাবজেক্টর জন্য এটি নির্ভরতা রেজোলিউশন পর্যায়ে 1 মিনিট পর্যন্ত যোগ করে। ছোট প্রকল্পগুলির জন্য এটি
মনোমুগ্ধকর

এটি ট্রানজিটিভ নির্ভরতা সংস্করণগুলিকেও ওভাররাইড করে, বলে যে আপনি নির্ভরতা ব্যবস্থাপনায় সংস্করণ 3.0.০.০ ঘোষণা করেছেন, তবে একটি উপ-প্রকল্পের জন্য আপনাকে একটি পুরানো সংস্করণ যেমন 2.5.0.0 ব্যবহার করতে হবে, তবে যদি আপনার এই পুরানো প্রকল্পের উপর নির্ভর করে কোনও প্রকল্প থাকে ট্রানজিটিভ নির্ভরতা 2.5.0 থেকে ওভাররাইট করা হবে যা নির্ভরতা পরিচালন প্লাগইন হিসাবে ঘোষণা করা হয়েছে তাই 3.0.0 এক্ষেত্রে খুব অদ্ভুত আচরণ
KameeCoding

7

গ্রেডেল ৪.6 হিসাবে, ডকুমেন্টেশনে নির্ভরতা সীমাবদ্ধতাগুলি এটি অর্জনের উপায় হিসাবে প্রস্তাবিত। Https://docs.gradle.org/current/userguide/declaring_d dependency.html# declaring_a_d dependency_without_version থেকে :

বড় প্রকল্পগুলির জন্য প্রস্তাবিত অনুশীলন হ'ল সংস্করণ ছাড়াই নির্ভরতা ঘোষণা করা এবং সংস্করণ ঘোষণার জন্য নির্ভরতা সীমাবদ্ধতা ব্যবহার করা। সুবিধাটি হ'ল নির্ভরতা সীমাবদ্ধতাগুলি আপনাকে ট্রানজিটিভগুলি সহ সমস্ত নির্ভরতার সংস্করণগুলি এক জায়গায় পরিচালনা করতে দেয়।

আপনার মূল build.gradleফাইলটিতে:

allprojects {
  plugins.withType(JavaPlugin).whenPluginAdded {
    dependencies {
      constraints {
        implementation("com.google.guava:guava:27.0.1-jre")
      }
    }
  }
}

জাভা প্লাগইন (... whenPluginAdded {) এর জন্য একটি চেক সহ নির্ভরতা ব্লককে মোড়ানো কঠোরভাবে প্রয়োজনীয় নয়, তবে এটি পরে একই বিল্ডে জাভা-বিহীন প্রকল্প যুক্ত করা পরিচালনা করবে।

তারপরে একটি শিশু গ্রেড প্রকল্পে আপনি কেবল ভেরিসনটি বাদ দিতে পারেন:

apply plugin: "java"

dependencies {
  implementation("com.google.guava:guava")
}

চাইল্ড বিল্ডস এখনও একটি উচ্চতর সংস্করণ নির্দিষ্ট করতে চয়ন করতে পারেন। যদি কোনও নিম্ন সংস্করণ নির্দিষ্ট করা থাকে তবে এটি সীমাবদ্ধতার মধ্যে স্বয়ংক্রিয়ভাবে সংস্করণে আপগ্রেড হবে।


1
নির্ভরতা সীমাবদ্ধতা গ্রেড ৪.6 এ যুক্ত করা হয়েছে, সুতরাং এটি গ্রেডেল ৪. or বা তারও বেশি এর সাথে কাজ করবে।
জিম হুরনে

আমি মনে করি গ্রেডল সরবরাহ করে যে জাভা প্ল্যাটফর্ম প্লাগইন এ জাতীয় ক্ষেত্রে ব্যবহৃত হয়। তবে এই মুহুর্তে গ্রেডল ডকুমেন্টেশন খুব পরিষ্কার নয়। আমি অনুমান করি এর ব্যবহারও allprojectsঠিক আছে।
জোজআটএক্সজিএমএম

আমি মূল প্রকল্পে সীমাবদ্ধতাগুলি ঘোষণা করতে চাই তবে কেবলমাত্র আমার একটি সাবপ্রজেক্টে, আমি সেই সমস্ত নির্ভরতাগুলির সংজ্ঞা নির্ধারিত লোড করতে চাই।
ডিসি

2

io.spring.gradle:dependency-management-pluginপ্লাগইনটিতে নতুন গ্রেডেল 3.x সিরিজ নিয়ে সমস্যা রয়েছে তবে 2.x সিরিজের জন্য স্থিতিশীল। বাগ রিপোর্টের রেফারেন্সের জন্য গ্রেডল 3 # 115 এর জন্য ড্রপ সমর্থন

বসন্তের ক্ষেত্রে ( বিওএম ব্যবহারের প্রধান প্রচারক ) আপনার সাথে শেষ হতে পারে:

buildscript {
    repositories {
        mavenLocal()
        jcenter()
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE'
    }
}

repositories {
    mavenLocal()
    jcenter()
}

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:Athens-SR3'
    }
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'

    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

মনে রাখবেন যে, io.spring.platform:platform-bomআছে org.springframework.boot:spring-boot-starter-parentতাই এটি বসন্ত বুট সঙ্গে compatable হয় পিতা বা মাতা হিসাবে

আপনি এর মাধ্যমে প্রকৃত নির্ভরতা রেজোলিউশন যাচাই করতে পারবেন:

$ gradle dependencies
$ gradle dependencies --configuration compile
$ gradle dependencies -p $SUBPROJ

$ gradle buildEnvironment
$ gradle buildEnvironment -p $SUBPROJ

বা কাজের সাথে:

task showMeCache {
    configurations.compile.each { println it }
}

প্রবর্তনের কারণ বুঝতে গ্র্যাডলের জন্য অফিসিয়াল সোরিং ব্লগ পোস্ট আরও ভাল নির্ভরতা ব্যবস্থাপনা পড়ুন io.spring.gradle:dependency-management-plugin


1

আপনি নীচের কোড ব্যবহার করে একটি নির্ভরতা কেন্দ্রিয় করতে পারেন :

ভিতরে gradle.properties

COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.1
TARGET_SDK_VERSION=26
MIN_SDK_VERSION=14

ANDROID_SUPPORT_VERSION=26.0.2

প্রতিটি মডিউল এ যোগ করুন build.gradle:

android {
    compileSdkVersion COMPILE_SDK_VERSION as int
    buildToolsVersion BUILD_TOOLS_VERSION as String

    defaultConfig {
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
        versionCode 1
        versionName "1.0"

    }

}

dependencies {
 compile "com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-v4:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-annotations:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-vector-drawable:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:design:${ANDROID_SUPPORT_VERSION}"
}

1

এই ব্লগ পোস্টটি নির্ভরতা এবং গোষ্ঠীগুলিকে কনফিগারেশন হিসাবে পরিচালনার পরামর্শ দেয়: https://www.javacodegeeks.com/2016/05/manage-d dependferences-gradle-mુટ- প্রকল্প- বিল্ড html

আমি নিজে চেষ্টা করে দেখিনি, তবে এটি আকর্ষণীয় দেখাচ্ছে।

রুট প্রকল্প build.gradle

subprojects {
  configurations {
    commonsIo
  }

  dependencies {
    commonsIo 'commons-io:commons-io:2.5'
  }
}

উপ-প্রকল্প build.gradle

configurations {
  compile.extendsFrom commonsIo
}

0

আপনাকে গ্রেড ফাইলটি পরিষ্কার রাখতে, আমরা একটি অ্যারেতে নির্ভরতা গোষ্ঠী করতে পারি এবং সেগুলি পরে প্রয়োগ করতে পারি।

  1. নির্ভরতা ব্লকের বাইরের বিল্ড্র্যাডলে (অ্যাপ্লিকেশন স্তর) লাইব্রেরির সংস্করণ যুক্ত করুন :

// লাইব্রেরির সংস্করণ ঘোষণা করুন

final RetrofitVersion = '2.3.0'
final OkHttpVersion = '3.9.1'
  1. সম্পর্কিত নির্ভরতার একটি অ্যারে তৈরি করুন, যাতে আপনি এটি পরে খুঁজে পেতে পারেন। নির্ভরতা ব্লকের বাইরে বিল্ড . gradle (অ্যাপ্লিকেশন স্তর) এ এটি যুক্ত করুন :

// লাইব্রেরিতে সংস্করণ ব্যবহার করুন এবং অ্যাক্সেস নামের সাথে নির্ভরতা যুক্ত করুন (যেমন retrofit (প্রথমটির মতো))

final networkDependencies = [
        retrofit             : "com.squareup.retrofit2:retrofit:${RetrofitVersion}",
        retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}",
        retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}",
        okHttp3              : "com.squareup.okhttp3:okhttp:${OkHttpVersion}",
        okHttp3Logging       : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}"
]
  1. এবং নির্ভরতা ব্লক :

// অ্যারে থেকে সমস্ত নির্ভরতা প্রয়োগ করুন

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation networkDependencies.values()
}

সুতরাং চূড়ান্ত কোডটি এর মতো দেখাবে:

final RetrofitVersion = '2.3.0'
final OkHttpVersion = '3.9.1'

final networkDependencies = [
        retrofit             : "com.squareup.retrofit2:retrofit:${RetrofitVersion}",
        retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}",
        retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}",
        okHttp3              : "com.squareup.okhttp3:okhttp:${OkHttpVersion}",
        okHttp3Logging       : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}"
]

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation networkDependencies.values()
}

এর মাধ্যমে এনোটেশন প্রসেসর কীভাবে অন্তর্ভুক্ত করবেন ?? লম্বোকের ক্ষেত্রে
প্রীতিশ যোশি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.