গ্রেডল টাস্ক - জাভা অ্যাপ্লিকেশনটিতে যুক্তিগুলি পাস করুন


127

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

programName ( string | -f filename | -d key | -h)
Options:
    string         Message to be used.
    -d key         Use default messages, key must be s[hort], m[edium] or l[ong].
    -f filename    Use specified file as input.
    -h             Help dialog.

গ্রেডল টাস্কটি দেখে মনে হচ্ছে:

task run (type: JavaExec){
    description = "Secure algorythm testing"
    main = 'main.Test'
    classpath = sourceSets.main.runtimeClasspath
}

আমি দৌড়ানোর চেষ্টা করেছি gradle run -hএবং এটি কার্যকর হয় না।


উত্তরগুলি কি আপনার প্রয়োজনীয়তার সাথে খাপ খায়? যদি তা হয় তবে আপনার সমাধানটিকে সমাধান হিসাবে চিহ্নিত করা উচিত।
ফ্রান্সিসকো জে লোপেজ-পেলিসার

1
আসলেই নয় ... একটি বন্ধু এবং আমি এটি করার একটি উপায় আবিষ্কার করেছি তবে কোনও সমাধান প্রকাশের জন্য আমাদের কাছে এটি এখনও পরিষ্কার নয়, প্রস্তাবিত উভয় সমাধানই চেষ্টা করা হয়েছিল, আমরা বুঝতে পেরেছিলাম যে এটি কী করা উচিত, তবে আমরা করিনি ' টি সত্যিই কাজ করছে বলে মনে হচ্ছে ...
রিকুয়েনকো জোন্স

@ 6uitar6reat6od আপনি কীভাবে শেষ পর্যন্ত সমাধান করেছেন? এছাড়াও গ্রেড কি সংস্করণ?
এক্সএলএম

উত্তর:


80

গ্রেডেল ৪.৯ থেকে কমান্ড লাইন আর্গুমেন্টগুলি --args দিয়ে পাস করা যেতে পারে। উদাহরণস্বরূপ, আপনি যদি কমান্ড লাইন যুক্তি দিয়ে অ্যাপ্লিকেশনটি চালু করতে চান তবে আপনি foo --barব্যবহার করতে পারেন

গ্রেড রান --args = 'ফু - বার'

গ্রেডল অ্যাপ্লিকেশন প্লাগইনও দেখুন

গ্রেডল র‍্যাপার কীভাবে আপগ্রেড করবেন


1
'প্রত্যাশিত নাকি টাইপো? সমস্ত আর্গুমেন্টগুলি কি একক উদ্ধৃতি দ্বারা সীমাবদ্ধ স্ট্রিং হিসাবে পাস করা উচিত?
রিকুয়েঙ্কো জোন্স

প্রতি @RecuencoJones ফিক্সড docs.gradle.org/current/userguide/...
ড্রিউ স্টিফেনস

1
গ্রেড রান --args = 'ফু
জিম বন্যা

3
'foo --bar'বিভ্রান্তিকর, কেন শুধু ব্যবহার না 'foo bar'
এরিক ওয়াং

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

100

গ্রেডেল 4.9+

gradle run --args='arg1 arg2'

এটি ধরে নেয় আপনার অ্যাপ্লিকেশন প্লাগইনটিbuild.gradle কনফিগার করা আছে । আপনার দেখতে এটির মতো দেখতে হবে:build.gradle

plugins {
  // Implicitly applies Java plugin
  id: 'application'
}

application {
  // URI of your main class/application's entry point (required)
  mainClassName = 'org.gradle.sample.Main'
}

প্রাক গ্রেডেল 4.9

আপনার মধ্যে নিম্নলিখিত অন্তর্ভুক্ত করুন build.gradle:

run {
    if (project.hasProperty("appArgs")) {
        args Eval.me(appArgs)
    }
}

তারপরে চালানো: gradle run -PappArgs="['arg1', 'args2']"


7
এই উত্তরটি কেবল সহায়ক ছিল না, এটি ছিল সবচেয়ে সহজ।
জেসি ক্যাল্ডারন

আপনার আপডেটের জন্য আপডেট: gradle run --args 'arg1 arg2'আমার জন্য কাজ করে না। আমার করণীয় ছিল:gradle run --args='arg1 arg2'
সিএমআইয়ার্স

@ মাইয়ার্স এটি ধরার জন্য ধন্যবাদ! আমি আমার আপডেট আপডেট করেছি
xlm

28

এত দেরিতে উত্তর দেওয়ার জন্য দুঃখিত।

আমি @xlm এর মতো উত্তর পেয়েছি:

task run (type: JavaExec, dependsOn: classes){
    if(project.hasProperty('myargs')){
        args(myargs.split(','))
    }
    description = "Secure algorythm testing"
    main = "main.Test"
    classpath = sourceSets.main.runtimeClasspath
}

এবং অনুরোধ:

gradle run -Pmyargs=-d,s

28

আপনি যদি সর্বদা একই আর্গুমেন্ট ব্যবহার করতে চান তবে আপনার যা প্রয়োজন তা নিচে নীচে।

run {
    args = ["--myarg1", "--myarg2"]
}

2
ঠিক আছে, আমার মতো নিখুঁত নতুনদের জন্য: রান টাস্কটি সংজ্ঞায়িত করতে সক্ষম হতে আপনার বিল্ড.gradle এ নিম্নলিখিত দুটি লাইন থাকা উচিত: প্লাগইন প্রয়োগ করুন: 'অ্যাপ্লিকেশন' mainClassName = "<প্যাকেজ পাথ সহ পুরো ক্লাসের নাম>" অন্যথায়, আপনি সংজ্ঞা দিতে পারবেন না বুয়েড.gradle
এমকে

1
আমি id 'application'প্লাগইনটি ব্যবহার করছি এবং এটি আমার উত্তর ছিল (এটি কার্যকর) needed
বড় ধনী

6

গ্রেডলের মাধ্যমে জাভা ক্লাস চলাকালীন সমস্যার সমাধান সিস্টেমের বৈশিষ্ট্য এবং পরামিতিগুলিতে আপনি সমাধানটি পেতে পারেন । উভয়ই argsসম্পত্তির ব্যবহারের সাথে জড়িত

গ্রেডল ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে-D বা এর সাথে পাস করার মধ্যে পার্থক্যটি আপনার পড়া উচিত-P


এটাও দেখেছি। তবুও খুঁজছি। এই সমস্ত পদ্ধতিতে বর্তমান বৈশিষ্ট্যগুলি সম্পাদনা / ম্যাসেজ করতে এবং সেগুলি পাশ করে দিতে চাইছে বলে মনে হচ্ছে। অ্যাপ্লিকেশন বা পরিষেবা চালনার জন্য কমান্ড লাইন এবং জাভা বৈশিষ্ট্যগুলি "প্রসঙ্গ" বা "কনফিগারেশন" সেটিংসের অনুরূপ। পাশের পাশের প্রোফাইল বা অন্য কিছু হিসাবে "রান প্যারামিটার" এর মতো জিনিসগুলি করা এমন একটি প্লাগইন থাকা ভাল।
হবে

5

অবশ্যই উপরের উত্তরগুলি কাজটি করে তবে তবুও আমি এরকম কিছু ব্যবহার করতে চাই

gradle run path1 path2

ভাল এটি করা যায় না, তবে আমরা যদি পারি:

gralde run --- path1 path2

যদি আপনি মনে করেন এটি আরও মার্জিত, তবে আপনি এটি করতে পারেন, কৌশলটি হ'ল কমান্ড লাইনটি প্রক্রিয়াকরণ করা এবং গ্রেড করার আগে এটি সংশোধন করা, এটি আরআর স্ক্রিপ্ট ব্যবহার করে করা যেতে পারে

নীচের init স্ক্রিপ্ট:

  1. কমান্ড লাইনটি প্রক্রিয়া করুন এবং '---' অনুসরণ করে এবং অন্যান্য সমস্ত আর্গুমেন্ট মুছে ফেলুন
  2. গ্রেড.সেক্সটে সম্পত্তি 'অ্যাপগ্রেস' যুক্ত করুন

সুতরাং আপনার রান টাস্কে (বা জাভেক্সেক্স, এক্সিকিউট) আপনি এটি করতে পারেন:

if (project.gradle.hasProperty("appArgs")) {
                List<String> appArgs = project.gradle.appArgs;

                args appArgs

 }

আরআইডি স্ক্রিপ্টটি হ'ল:

import org.gradle.api.invocation.Gradle

Gradle aGradle = gradle

StartParameter startParameter = aGradle.startParameter

List tasks = startParameter.getTaskRequests();

List<String> appArgs = new ArrayList<>()

tasks.forEach {
   List<String> args = it.getArgs();


   Iterator<String> argsI = args.iterator();

   while (argsI.hasNext()) {

      String arg = argsI.next();

      // remove '---' and all that follow
      if (arg == "---") {
         argsI.remove();

         while (argsI.hasNext()) {

            arg = argsI.next();

            // and add it to appArgs
            appArgs.add(arg);

            argsI.remove();

        }
    }
}

}


   aGradle.ext.appArgs = appArgs

সীমাবদ্ধতা:

  1. আমাকে '---' ব্যবহার করতে বাধ্য করা হয়েছিল '-' না
  2. আপনাকে কিছু গ্লোবাল আরডি স্ক্রিপ্ট যুক্ত করতে হবে

আপনি যদি বিশ্বব্যাপী init স্ক্রিপ্ট পছন্দ না করেন তবে আপনি এটি কমান্ড লাইনে নির্দিষ্ট করতে পারেন

gradle -I init.gradle run --- f:/temp/x.xml

বা আপনার শেলটিতে আরও ভাল একটি নাম যুক্ত করুন:

gradleapp run --- f:/temp/x.xml

2
এটি দুর্দান্ত কাজ করে ... যদি আমার কোনও যুক্তি কোনও ড্যাশ দিয়ে শুরু না করে। এটি কমান্ড কমান্ড লাইন পার্সারদের পক্ষে এটি অকেজো করে তোলে :(। এর সাথে সাথে গ্রেড মনে হয় গ্রেডকে এই আর্গুকে গ্রেডের একটি আর্গুমেন্ট হিসাবে বিবেচনা করবে (আমি মনে করি না এটির argsI.remove()কাঙ্ক্ষিত প্রভাব রয়েছে)। পরামর্শগুলি?
ক্রাইস

3

argsপ্রকল্পের বৈশিষ্ট্যগুলি ব্যবহার করে আপনাকে এটিকে টাস্ক হিসাবে পাস করতে হবে, এরকম কিছু:

args = [project.property('h')]

আপনার কার্য সংজ্ঞায় যুক্ত হয়েছে ( DSL ডক্স দেখুন )

তারপরে আপনি এটি চালাতে পারেন:

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