গ্র্যাডল ব্যবহার করার সময় আমি কীভাবে একটি ট্রানসিটিভ নির্ভরতার সমস্ত দৃষ্টান্তগুলি বাদ দেব?


108

আমার গ্রেডেল প্রকল্পটি applicationএকটি জার ফাইল তৈরি করতে প্লাগইন ব্যবহার করে । রানটাইম ট্রানজিটিভ নির্ভরতার অংশ হিসাবে, আমি ভিতরে টান শেষ করি org.slf4j:slf4j-log4j12। (এটি কমপক্ষে 5 বা 6 অন্যান্য ট্রান্সজিটিভ নির্ভরতার মধ্যে একটি সাব-ট্রানসিটিভ নির্ভরতা হিসাবে উল্লেখ করা হয় - এই প্রকল্পটি বসন্ত এবং হ্যাডোপ ব্যবহার করছে, তাই রান্নাঘরের ডোবা ছাড়া সমস্ত কিছুই টানছে ... অপেক্ষা নেই ... সেখানেও আছে :) )।

আমি বিশ্বজুড়ে slf4j-log4j12আমার তৈরি জার থেকে জারটি বাদ দিতে চাই । সুতরাং আমি এটি চেষ্টা করেছি:

configurations {
  runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}

যাইহোক, এটি সহ সমস্ত org.slf4j নিদর্শনগুলি বাদ দেয় বলে মনে হচ্ছে slf4j-api। ডিবাগ মোডের অধীনে চলাকালীন আমি লাইনগুলি দেখতে পাই যেমন:

org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).

আমি প্রতিটি slf4j-log4j12ট্রানজিটিভ নির্ভরতার উত্সটি খুঁজতে এবং তারপরে compile foo { exclude slf4j... }আমার dependenciesব্লকে স্বতন্ত্র বক্তব্য রাখতে চাই না ।

হালনাগাদ:

আমি এটি চেষ্টাও করেছি:

configurations {
  runtime.exclude name: "slf4j-log4j12"
}

যা বিল্ড থেকে সমস্ত কিছু বাদ দিয়ে শেষ হয় ! যদিও আমি নির্দিষ্ট করেছি group: "*"

আপডেট 2:

আমি এর জন্য গ্রেডল সংস্করণ 1.10 ব্যবহার করছি।


4
আপনি আপনার প্রশ্নের উত্তর গ্রহণ করতে চাইতে পারেন; এটি ভদ্র এবং আপনার প্রশ্নের উত্তর দেওয়ার জন্য আরও আগ্রহ অর্জন করে
মাইকেল ডিয়ার্ডফ

উত্তর:


144

আহ, নিম্নলিখিতগুলি কাজ করে এবং যা আমি চাই তা করে:

configurations {
  runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

দেখে মনে হয় যে একটি বাদ দেওয়া বিধিতে কেবল দুটি বৈশিষ্ট্য রয়েছে - groupএবং module। যাইহোক, উপরের সিনট্যাক্সটি আপনাকে কোনও প্রাকটিক্যাল সম্পত্তিটিকে শিকারী হিসাবে নির্দিষ্ট করা থেকে বিরত রাখে না। পৃথক নির্ভরতা থেকে বাদ দেওয়ার চেষ্টা করার সময় আপনি স্বেচ্ছাচারিত বৈশিষ্ট্য নির্দিষ্ট করতে পারবেন না। উদাহরণস্বরূপ, এটি ব্যর্থ:

dependencies {
  compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') {
    exclude group: "org.slf4j", name: "slf4j-log4j12"
  }
}

সঙ্গে

No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule

সুতরাং আপনি যদি একটি এর সাথে নির্ভরতা নির্দিষ্ট করতে পারেন group:এবং name:আপনি একটি সহ একটি বর্ধন নির্দিষ্ট করতে পারবেন নাname: ! এর !?

সম্ভবত একটি পৃথক প্রশ্ন, তবে ঠিক তখন একটি মডিউল কী? আমি গ্রুপআইডের মাভেন ধারণাটি বুঝতে পারি: আর্টিফ্যাক্টআইডি: সংস্করণ, যা আমি বুঝতে পারি গ্রুপে: নাম: গ্রেডলে সংস্করণে অনুবাদ হয়। তবে তারপরে, আমি কীভাবে জানতে পারি যে কোনও নির্দিষ্ট মাভেন আর্টফ্যাক্টের সাথে (গ্রেড-স্পোক) মডিউলটি কী?


4
এটি গ্রেডেল ফোরামগুলির জন্য আরও ভাল আলোচনার মতো বলে মনে হচ্ছে ।
সুপারইব


4
ওহ, আমি ঠিক এই সঠিক সমস্যার সাথে লড়াই করেছি। গ্রেড সহ কিছু করা খুব ব্যতিক্রম বলে মনে হয়েছে, বিশেষত একটি বড় প্রকল্পের দ্বন্দ্বগুলি সমাধান করুন। আমি আনন্দের সাথে গ্রেডেলের ডিএসএল-এর সাথে এক্সএসডি বৈধতা সহ ভার্জোজ এক্সএমএল নেব
সিজেবুমস

"নাম:" "মডিউল:" হওয়া উচিত, তবে এটি আপনার জন্য কাজ করবে :)
গাইকে K

4
ভবিষ্যতের আমার এবং অন্যের সুবিধার জন্য, আমি আমার যুদ্ধ প্যাকেজ থেকে সমস্ত নির্ভরতা গ্রন্থাগার (গ্রেডেল 3.3) বাদ দিতে চেয়েছিলাম। সুতরাং প্রত্যেকের তালিকাভুক্ত না করে, আমি কেবল করেছিলাম configurations { runtime.exclude group: '*' }
ব্যবহারকারী 1070304

40

বিশ্বব্যাপী এক বা একাধিক লাইব্রেরি বাদ দেওয়ার জন্য আপনার বিল্ডড্র্যাডলে নিম্নলিখিতটি যুক্ত করুন

configurations.all {
   exclude group:"org.apache.geronimo.specs", module: "geronimo-servlet_2.5_spec"
   exclude group:"ch.qos.logback", module:"logback-core"
}

এখন বাদ পড়ার ব্লকের দুটি বৈশিষ্ট্য গ্রুপ এবং মডিউল রয়েছে । আপনাদের মধ্যে যারা ম্যাভেন পটভূমি থেকে আসার জন্য, গ্রুপ হিসাবে একই groupId এবং মডিউল হিসাবে একই artifactId । উদাহরণ: com.mchange বাদ দিতে: c3p0: 0.9.2.1 নীচে ব্লক বাদ দিতে হবে

exclude group:"com.mchange", module:"c3p0"

4
ধন্যবাদ আমি বুঝতে পেরেছি, তারা বলতে পারত মডিউলটির অর্থ নাম
রেমারিও

31

আপনার পদ্ধতির সঠিক। (পরিস্থিতিগুলির উপর নির্ভর করে আপনি ব্যবহার করতে পারেন configurations.all { exclude ... })) যদি এগুলি বাদ দেয় তবে সত্যিকার অর্থে যদি কোনও একক নির্ভরতার চেয়ে বেশি বাদ থাকে (আমি কখনই লক্ষ্য করি নি যে এগুলি ব্যবহার করার সময়), দয়া করে http://forums.gradle.org এ একটি বাগ ফাইল করুন , আদর্শভাবে একটি প্রজননযোগ্য উদাহরণ সহ with


4
configurations.all{}ঠিক আমি যা খুঁজছিলাম পিটার পোস্টের জন্য ধন্যবাদ
pczeus

21

নীচের উদাহরণে আমি বাদ দিই

বসন্ত-বুট-স্টার্টার-টমক্যাট

compile("org.springframework.boot:spring-boot-starter-web") {
     //by both name and group
     exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' 
}

6

আমি স্প্রিং বুট 1.5.10 ব্যবহার করছি এবং লগব্যাক বাদ দেওয়ার চেষ্টা করলাম, উপরের প্রদত্ত সমাধানটি ভাল কাজ করে না, পরিবর্তে আমি কনফিগারেশন ব্যবহার করি

configurations.all {
    exclude group: "org.springframework.boot", module:"spring-boot-starter-logging"
}

3

@ বার্গুইগা-মোহাম্মদ-আমাইন যা বলেছে তা ছাড়াও, আমি সবেমাত্র পেয়েছি যে একটি ওয়াইল্ডকার্ডের জন্য মডিউলটির খালি স্ট্রিংটি রেখে দেওয়া দরকার:

compile ("com.github.jsonld-java:jsonld-java:$jsonldJavaVersion") {
    exclude group: 'org.apache.httpcomponents', module: ''
    exclude group: 'org.slf4j', module: ''
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.