গ্রেডল বিল্ডিং বন্ধ করার প্রস্তাবিত উপায়


162

কোনও সমস্যা সনাক্ত করার পরে আমি কীভাবে গ্রেডল বিল্ডিং বন্ধ করতে পারি? আমি দৃ as়তা ব্যবহার করতে পারি, একটি ব্যতিক্রম নিক্ষেপ করতে পারি, একটি System.exit (খারাপ ধারণা) করতে পারি, বা গ্রেডলে একটি ডেডিকেটেড ফাংশন ব্যবহার করতে পারি (তবে আমি এটির সন্ধান করতে পারি না)। গ্রেডলের (এবং কেন?) সবচেয়ে ভাল উপায় What

উত্তর:


117

আমি সাধারণত প্রাসঙ্গিক ব্যতিক্রম থেকে নিক্ষিপ্ত org.gradle.api প্যাকেজ , উদাহরণস্বরূপ, InvalidUserDataExceptionকেউ যখন কোনও অবৈধ কিছু প্রবেশ করেছে বা GradleScriptExceptionআরও সাধারণ ত্রুটির জন্য।

আপনি যদি বর্তমান কাজ বা ক্রিয়া বন্ধ করতে চান এবং পরবর্তীটিতে যেতে চান তবে আপনি একটি নিক্ষেপ করতে পারেন StopActionException


5
যদি কোনও কাজ সফলভাবে সম্পাদন না করে তবে আপনি TaskExecutionException ব্যবহার করতে পারেন । (এটি 1.11 গ্রেডের গ্রেড অনুসারে সত্য, এটি কখন চালু হয়েছিল তা আমি নিশ্চিত নই))
জোশ গাগনন

এখানে কি কোনও সুন্দর বাক্য গঠন আছে? কোটলিনের পূর্ব শর্তের বাক্য গঠনটি বিবেচনা করুন: require(something != whatever) { "No good!" }আরও if(something != whatever){ throw new GradleException("No good!") }
ভার্বোজ

ভয়াবহ বিষয়টি GradleScriptExceptionএটির কারণগুলির জন্য এটির জন্য দ্বিতীয় প্যারামিটার প্রয়োজন।
ট্রেজকাজ

... অবশ্যই আমরা এড়িয়ে চলেছি যে এটি " ব্যতিক্রম দ্বারা প্রোগ্রামিং " ?! আমি লিগ্যাসি সেভাবে লিখিত কোড করেছি এবং এটি বজায় রাখা একটি বিভীষিকাময় ... পুরানো দিনগুলিতে চারপাশের দর্শনটি makeহ'ল rules(টাস্ক-গুলি) সফল হয়েছে বা ব্যর্থ হয়েছে। আমি একবার চেষ্টা করেছি return false- গ্রেডল কেবল এটিকে উপেক্ষা করে চালিয়ে যেতে লাগল।
হবে

87

আপনি যদি বিল্ডটি থামাতে চান তবে নিক্ষেপ করুন:

throw new GradleException('error occurred')

বা উপরের ব্যতিক্রমের জন্য সাবক্লাস নিক্ষেপ করুন। কিছু সাবক্লাস ব্যতিক্রম আসলে কেবলমাত্র বর্তমান কার্যকে ব্যর্থ করে তবে বিল্ডটি দিয়ে চালিয়ে যায়।


28

বর্তমানে কোনও উত্সর্গীকৃত পদ্ধতি নেই, যদিও এটি যুক্ত করার জন্য আলোচনা হয়েছে।

গ্রেডল বিল্ড বন্ধ করার প্রস্তাবিত উপায় হ'ল ব্যতিক্রম ছোঁড়া। গ্রোভির যেহেতু ব্যতিক্রমগুলি পরীক্ষা করা নেই, এবং গ্রেডল ডিফল্টরূপে ব্যতিক্রম প্রিন্টটি মুদ্রণ করে না, তাই ব্যতিক্রমটি যে ছুঁড়েছে তা সমালোচনা নয়। স্ক্রিপ্টগুলি তৈরিতে, গ্র্যাডলএক্সসেপশন প্রায়শই ব্যবহৃত হয় তবে গ্রোভির দৃser় বক্তব্যও যুক্তিসঙ্গত বলে মনে হয় (পরিস্থিতি এবং দর্শকদের উপর নির্ভর করে)। কী গুরুত্বপূর্ণ তা হল একটি পরিষ্কার বার্তা সরবরাহ করা। কোনও কারণ যুক্ত করা (যদি উপলভ্য থাকে) ডিবাগিংয়ের জন্য সহায়তা করে ( --stacktrace)।

Gradle ডেডিকেটেড ব্যতিক্রম ধরনের উপলব্ধ StopExecutionException/ StopActionExceptionবর্তমান কাজ / টাস্ক কর্ম বাঁধন কিন্তু বিল্ড অবিরত রাখার জন্য।


19

পরে যদি আপনার এই ব্যতিক্রমটি ধরতে সক্ষম হওয়ার কোনও ইচ্ছা না থাকে তবে তা হল পিঁপড়াকে ব্যর্থ টাস্ক বলা। আমার মতে এটি পড়া কিছুটা সহজ এবং আপনি - স্ট্যাকট্রেস ব্যবহার না করেই ব্যবহারকারীকে একটি দুর্দান্ত বার্তা দিতে পারেন।

task (tarball, dependsOn: warAdmin) << {
    ant.fail('The sky is falling!!')
}

আপনাকে এই বার্তা দেয়:

* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!

সম্ভবত আপনি এটি ধরতে পারেন (সম্ভবত এটি পিঁপড়ার বিল্ডএক্সেপশন ছুড়ে ফেলেছে?) তবে যদি এটি একটি লক্ষ্য হয় তবে আমি পিপীলিকা ব্যবহার করি না। টাইম_এইটসের পরামর্শ অনুসারে স্ট্যান্ডার্ড গ্রেডেল ব্যতিক্রম ছুঁড়ে দিয়ে কী কী ব্যতিক্রম ধরবে তা আমি কেবল সহজেই সহজ করব।


কীভাবে সেট আপ করব? ডাকা?
পাউডার366

1
শুধু অ্যান্টফেইলকে কল করুন ('আপনার পছন্দের বার্তা') কোনও সেটআপের প্রয়োজন নেই
Gus

2
দেখে মনে হচ্ছে এই আউটপুট হয় অভিন্ন ব্যবহার করে throw new GradleException("The sky is falling!!")(Gradle 3.4.1)
mgaert

@ এমগের্ট আমি মনে করি মনে হয় 4 বছর আগে যখন আমি এটি লিখেছিলাম তখন মুদ্রিত বার্তাটি আলাদা হয়েছিল (তবে এটি দীর্ঘ সময় এবং আমি সেসময় কোন সংস্করণটি বর্তমান ছিল তা নির্ধারণ এবং চেক করার মতো অনুভব করি না)। এর বাইরে, আইএমএইচও পিঁপড়া ফেইলটি পুরোপুরি বিল্ডটি বন্ধ করার অভিপ্রায়টি আরও স্পষ্টভাবে যোগাযোগ করে, যেখানে নিক্ষিপ্ত ব্যতিক্রমটি এমন কিছু হিসাবে পড়ে যেটি ধরা পড়ে এবং পরিচালনা করতে পারে।
গস

12

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

GradleException('your message, why the script is stopped.')

উদাহরণ:

if(null == System.getenv()['GRADLE_USER_HOME']) {
    throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}

5

এখানে একটি কোড টুকরা রয়েছে যা গ্রেডল জাভ্যাক কার্যটি ত্রুটিগুলি ছুঁড়ে মারার চেষ্টা করে:

task myCommand(type:Exec) {

    ... normal task setup ....

    ignoreExitValue true
    standardOutput = new ByteArrayOutputStream()
    ext.output = { standardOutput.toString() }
    doLast {
        if (execResult.exitValue) {
            logger.error(output())
            throw new TaskExecutionException( it,
                new Exception( "Command '${commandLine.join(' ')}' failed; "
                              + "see task output for details." )
            )
        }
    }
}

কমান্ডটি যখন ফিরে আসে 0তখন কোনও আউটপুট থাকে না। অন্য কোনও মান মানক আউটপুট মুদ্রণ করবে এবং বিল্ডটি থামিয়ে দেবে।

দ্রষ্টব্য: যদি আপনার কমান্ড ত্রুটি-আউটপুটকেও লিখতে থাকে তবে আপনার এটিকে ত্রুটি লগের মধ্যে অন্তর্ভুক্ত করতে হতে পারে।

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