আমি কীভাবে একটি গ্রেড স্ক্রিপ্টটিকে অন্যটিতে আমদানি করতে পারি?


99

আমার একটি জটিল গ্রেড স্ক্রিপ্ট রয়েছে যা বেশ কয়েকটি পরিবেশে নেটবিন প্রকল্পের সংখ্যা নির্মান এবং স্থাপনের চারপাশে প্রচুর কার্যকারিতা জড়িয়ে দেয়।

স্ক্রিপ্টটি খুব ভালভাবে কাজ করে তবে সংক্ষেপে এটি সবগুলি অর্ধ ডজন মানচিত্রের প্রকল্প এবং পরিবেশের তথ্যের মাধ্যমে কনফিগার করা হয়েছে।

আমি টাস্কগুলিকে অন্য কোনও ফাইলে ফেলে দিতে চাই, যাতে আমি কেবল একটি সাধারণ বিল্ড ফাইলে আমার মানচিত্রগুলি সংজ্ঞায়িত করতে পারি এবং অন্য ফাইল থেকে টাস্কগুলি আমদানি করতে পারি। এইভাবে, আমি বেশ কয়েকটি প্রকল্পের জন্য একই মূল কাজগুলি ব্যবহার করতে পারি এবং মানচিত্রের একটি সহজ সেট সহ সেই প্রকল্পগুলি কনফিগার করতে পারি।

কেউ কি আমাকে বলতে পারে যে আমি কীভাবে এন্টির কাজটির সাথে একইভাবে এক গ্রেড ফাইলটি অন্যটিতে আমদানি করতে পারি? আমি গ্র্যাডলের ডক্সকে এখনও ট্রল করেছি।

অতিরিক্ত তথ্য

টমের প্রতিক্রিয়া নীচের পরে, আমি ভেবেছিলাম আমি চেষ্টা করব এবং আমি যা বলতে চাইছি তা স্পষ্ট করে বলব।

মূলত আমার কাছে গ্রেড স্ক্রিপ্ট রয়েছে যা বেশ কয়েকটি সাব-প্রজেক্ট চালায়। যাইহোক, সাবজেক্টরগুলি সমস্ত নেটবিয়ান প্রকল্প, এবং তাদের নিজস্ব পিঁপড়া তৈরির স্ক্রিপ্টগুলি নিয়ে আসে, সুতরাং এগুলির প্রতিটি কল করার জন্য আমার গ্রেডে কাজ রয়েছে।

আমার সমস্যাটি হ'ল ফাইলের শীর্ষে আমার কিছু কনফিগারেশন রয়েছে, যেমন:

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

আমি এর পরে টাস্কগুলি তৈরি করি যেমন:

projects.each({
    task "checkout_$it.shortname" << {
         // Code to for example check module out from cvs using config from 'it'.
    }
})

আমার কাছে টাস্ক জেনারেশনের এই ধরণের অনেকগুলি স্নিপেট রয়েছে এবং সেগুলি সব জেনেরিক - তারা সম্পূর্ণরূপে প্রকল্পের তালিকার কনফিগারেশনের উপর নির্ভর করে।

সুতরাং আমি যা চাই তা হ'ল এটি একটি পৃথক স্ক্রিপ্টে রাখার এবং এটি নিম্নলিখিত ধরণেরভাবে আমদানি করার:

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.

সুতরাং এই উদাহরণে, Tasks.gradle এর সমস্ত জেনেরিক টাস্ক জেনারেশন কোড থাকবে এবং মূল বিল্ড.gradle ফাইলে সংজ্ঞায়িত প্রকল্পগুলির জন্য চালানো হবে। এইভাবে, Tasks.gradle একটি ফাইল যা সমস্ত বড় প্রকল্প দ্বারা ব্যবহার করা যেতে পারে যা নেটবিয়ান পিঁপড়া বিল্ড ফাইল সহ বেশ কয়েকটি উপ-প্রকল্প নিয়ে গঠিত।


4
বাহ্যিক ঘোষণা আমদানি করার জন্য "এর থেকে প্রয়োগ করুন: 'other.gradle'" বিবেচনা করুন। (দেখুন "12.4। এখানে একটি বাহ্যিক বিল্ড স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি কনফিগার করা হচ্ছে" গ্রেড.আর.এল.৯.৯.প্রিভিউ ১ / ডকস / ইউজারগাইড / ))
পেটর গ্ল্যাডখিখ ২

@ পেটারগ্ল্যাডকিখ apply fromতাত্ক্ষণিকভাবে বাহ্যিক কাজগুলি সম্পাদন করে। মৃত্যুদন্ড কার্যকর করার যুক্তিতে এটি পছন্দনীয় নাও হতে পারে (যেমন আমি যখন ইচ্ছা তখন কাজগুলি সম্পাদন করতে চাই, এখনই নয়)।
ইগরগানাপলস্কি

উপরের মন্তব্যে এই বিবৃতিটি সত্য নয় : apply fromঅবিলম্বে বাহ্যিক কাজগুলি কার্যকর করে। বিভ্রান্ত করবেন না। বাহ্যিক কাজগুলি কনফিগার করা হয়, কার্যকর হয় না।
Jarekczek

উত্তর:


134

0.9 এ একটি নতুন বৈশিষ্ট্য রয়েছে। আপনি apply from: 'other.gradle'কমান্ড ব্যবহার করতে পারেন ।

একই জিনিস সম্পর্কে আমার প্রশ্নটি এখানে পড়ুন: গ্রেডল বিল্ডের সাধারণ অংশগুলি বিভক্ত / ফ্যাক্টর করার কোনও উপায় আছে কি?


17

প্রশ্নের উত্তরটি প্লাগইন সিস্টেমে পরিণত হয়েছিল, যেখানে আপনি প্লাগইনগুলির একটি সেটে পছন্দসই কার্যকারিতা যুক্ত করতে পারেন যা ডিরেক্টরিতে অবস্থিত গ্রুভি ফাইল হতে পারে buildSrc/src/main/groovy। প্লাগিনগুলি জার হিসাবেও বান্ডিল হতে পারে যদিও আমি এটি চেষ্টা করে নি।

বিশদ এখানে: কাস্টম প্লাগইন


ঠিক তাই আপনি জানেন যে লিঙ্কটি নষ্ট হয়ে গেছে - এখানে একটি আপডেট গ্রেড.আর.এল
ডকস /

প্লাগইন লিঙ্ক: গ্রেড.আর.এল
ডকস

4

ভাল, আসলে আপনার বিল্ড ফাইলটি না দেখিয়ে আপনাকে কী সেরা দেয় তা বলা শক্ত।

আমি ধরে নিতে পারি যে মাল্টি-প্রজেক্ট বিল্ড হিসাবে আপনার পরিবেশকে বাড়িয়ে তোলা আপনাকে যে বিমূর্ততাটি সন্ধান করছেন তা সরবরাহ করা উচিত।

আপনার প্রকল্পের মূলটিতে build.gradleআপনি আপনার সমস্ত ডোমেন নির্দিষ্ট জিনিস এবং সেইসাথে আপনার সমস্ত সাবজেক্টরগুলিতে প্রযোজ্য জিনিসগুলি সংজ্ঞায়িত করেন :

repositories {
    add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) {
        name = 'destRepo'
        addIvyPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/ivys/ivy(-[revision]).xml')
        addArtifactPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/[type]s/[artifact](-[revision]).[ext]')
        descriptor = 'optional'
        checkmodified = true
    }
    ...
}
...
subprojects {
    sourceCompatibility = 1.5
    targetCompatibility = 1.5
    group = 'my.group'
    version = '1.0'
    uploadArchives {
        uploadDescriptor = true
        repositories {
            add rootProject.repositories.destRepo
        }
    }
    apply{ type my.group.gradle.api.plugins.MyPlugin }
    ...
}

dependsOnChildren()

প্রকল্পের রুট ডিরেক্টরিতে এমন একটি gradle.propertiesফাইলও থাকতে পারে যেখানে আপনি আপনার প্রকল্পগুলি দ্বারা ব্যবহৃত বৈশিষ্ট্যগুলি সংজ্ঞায়িত করেন:

buildDirName=staging
repo.dest.dir=/var/repo
...

তারপরে আপনার প্রোজেক্ট রুট নামের একটি অতিরিক্ত ফাইলে settings.gradleআপনি প্রকৃতপক্ষে আপনার সাবপ্রজেক্টগুলিকে নির্দেশ করেছেন:

include 'my-first-component',
        'my-second-component'
...
project(':my-first-component').projectDir = new File(rootDir, 'path/to/first/component')
project(':my-second-component').projectDir = new File(rootDir, 'path/to/second/component')
...

প্রতিটি উপ-প্রকল্প ডিরেক্টরিতে build.gradleকেবলমাত্র সাব-প্রকল্প নির্দিষ্ট স্টাফ সমন্বিত একটি ফাইল থাকে ।

আপনি যদি gradleআপনার প্রকল্পের মূল বা উপ-প্রকল্প ডিরেক্টরি থেকে আবেদন করেন তবে কিছুই না, গ্রেড স্বয়ংক্রিয়ভাবে বিভিন্ন ফাইলগুলিতে করা আপনার সমস্ত সংজ্ঞা বিবেচনা করবে।

এছাড়াও নোট করুন যে যতক্ষণ আপনি মূল স্তরে ডিফল্ট প্লাগইনের বাইরে কোনও প্লাগইন লোড না করেন ততক্ষণ আপনার প্রকল্পের মূলের জন্য কোনও সংকলন কার্য সম্পাদন করা হবে না।


4
উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ। এটি উপ-প্রকল্প নয় যা নিয়ে আমার সমস্যা হচ্ছে, বরং সাধারণ কাজের একটি 'লাইব্রেরি' তৈরি করা হচ্ছে। জিনিসগুলিকে আরও পরিষ্কার করার জন্য আমি আমার মূল প্রশ্নটি আরও তথ্য এবং কোড স্নিপেটের সাথে সম্পাদনা করেছি।
অ্যান্টনি রায়

4
সুতরাং আপনার নমুনা থেকে আমদানি ("Tasks.gradle") না করে আপনার সাব-প্রকল্পগুলি your} বিভাগে আপনার সমস্ত সাব-প্রকল্পগুলির দ্বারা ব্যবহৃত জেনেরিক টাস্ক জেনারেশন কোড নির্দিষ্ট করে। এটি আপনি যেমন অনুসন্ধান করছেন ঠিক একই বিমূর্ততা সরবরাহ করা উচিত !?
টম

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