কমান্ড লাইন থেকে গ্রেডে আর্গুমেন্ট কীভাবে পাস করবেন


106

আমি কমান্ড লাইন থেকে জাভা ক্লাসে একটি যুক্তি দেওয়ার চেষ্টা করছি। আমি এই পোস্টটি অনুসরণ করেছি: http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html তবে কোডটি আমার পক্ষে কাজ করে না (সম্ভবত এটি জাভাএক্সেকের জন্য নয়)? এখানে আমি চেষ্টা করেছি:

task listTests(type:JavaExec){
    main = "util.TestGroupScanner"
    classpath = sourceSets.util.runtimeClasspath
    // this works...
    args 'demo'
    /*
    // this does not work!
    if (project.hasProperty("group")){
        args group
    }
    */
}

উপরের হার্ড কোডেড আরগস মান থেকে আউটপুট:

C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>g listTests
:compileUtilJava UP-TO-DATE
:processUtilResources UP-TO-DATE
:utilClasses UP-TO-DATE
:listTests
Received argument: demo

BUILD SUCCESSFUL

Total time: 13.422 secs

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

C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>g listTests -Pgroup=demo -s

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle\build.gradle' line:25

* What went wrong:
A problem occurred evaluating root project 'testgradle'.
> java.lang.NullPointerException (no error message)

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project
 'testgradle'.
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
    at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38) 

Http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip এ একটি সাধারণ পরীক্ষা প্রকল্প উপলব্ধ রয়েছে যা সমস্যার চিত্র তুলে ধরে।

এটি গ্রেডল 1.0-আরসি -3 ব্যবহার করছে। নালপয়েন্টার কোডের এই লাইন থেকে:

args group 

আমি কার্য সংজ্ঞা প্রদানের আগে নিম্নলিখিত অ্যাসাইনমেন্টটি যুক্ত করেছি, তবে এটি ফলাফল পরিবর্তন করে নি:

group = hasProperty('group') ? group : 'nosuchgroup' 

কমান্ড লাইন আর্গুমেন্টগুলি গ্রেডগুলিতে কীভাবে পাস করতে হবে সে সম্পর্কে কোনও পয়েন্টার appreciated


টিএনএক্স অনেকটা জোশুয়া গোল্ডবার্গ। : এক যুক্তি জন্য নমুনা stackoverflow.com/a/58202665/2201814
MHSFisher

উত্তর:


64

project.groupএকটি পূর্বনির্ধারিত সম্পত্তি। এর সাথে -P, আপনি কেবল প্রকল্প বৈশিষ্ট্য সেট করতে পারেন যা পূর্বনির্ধারিত নয় । বিকল্পভাবে, আপনি জাভা সিস্টেমের বৈশিষ্ট্য ( -D) সেট করতে পারেন ।


4
আমাকে জানতে দেওয়ার জন্য ধন্যবাদ! নামটি টেস্টংগ্রুপে পরিবর্তন করা সমস্যার সমাধান করে। গ্রেড.এল / ডকস / কর্নার / ইউজারগাইড / রাইটিং_বিল্ড_স্ক্রিপ্টস এইচটিএমএলে ১৩.১ সারণিতে পূর্বনির্ধারিত বৈশিষ্ট্যের একটি তালিকা পাওয়া গেছে ।
লিডিয়া

4
কেবল লিঙ্কটি আপডেট করতে: ডকস.gradle.org/current/userguide/…
কিকিওয়া

56

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

এটিকে কার্যটিতে যুক্ত করুন:

task(runProgram, type: JavaExec) {

  [...]

  if (project.hasProperty('myargs')) {
      args(myargs.split(','))
  }

... এবং কমান্ড লাইনে এভাবে চালান

% ./gradlew runProgram '-Pmyargs=-x,7,--no-kidding,/Users/rogers/tests/file.txt'

4
আমি আলাদা পরামিতি সম্পর্কে কীভাবে যেতে পারি? উদাহরণস্বরূপ: gradle run -Purl='localhost', -Pport='8080', -Pusername='admin' build.gradle এ আমার কোডটি কেমন দেখতে হবে?
টমাস

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

4
কোনও উদ্বেগ নেই, এটি ইতিমধ্যে হয়েছে এবং এখানে
টমাস

28

আমার প্রোগ্রামটি দুটি আর্গুমেন্ট, আরগস [0] এবং আরোগুলি [1] সহ:

public static void main(String[] args) throws Exception {
    System.out.println(args);
    String host = args[0];
    System.out.println(host);
    int port = Integer.parseInt(args[1]);

আমার বিল্ড

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

আমার টার্মিনাল প্রম্পট:

gradle run  -PappArgsWhatEverIWant="['localhost','8080']"

17

গ্রেডল ৪.৯ হিসাবে অ্যাপ্লিকেশন প্লাগইন --argsবিকল্পটি বোঝে , সুতরাং আর্গুমেন্টগুলি পাস করা যতটা সহজ:

build.gradle

plugins {
    id 'application'
}

mainClassName = "my.App"

src / main / java / my / App.java

public class App {
    public static void main(String[] args) {
        System.out.println(args);
    }
}

বাশ

./gradlew run --args='This string will be passed into my.App#main arguments'

16

গ্রেডলে কাস্টম কমান্ড লাইন বিকল্পগুলি ব্যবহার করে এমন কিছু দিয়ে শেষ করা সম্ভব:

./gradlew printPet --pet="puppies!"

তবে গ্রেডলে কাস্টম কমান্ড লাইন বিকল্পগুলি ইনকিউবিটিং বৈশিষ্ট্য

জাভা সমাধান

এই জাতীয় কিছু শেষ করতে এখানে নির্দেশাবলী অনুসরণ করুন :

import org.gradle.api.tasks.options.Option;

public class PrintPet extends DefaultTask {
    private String pet;

    @Option(option = "pet", description = "Name of the cute pet you would like to print out!")
    public void setPet(String pet) {
        this.pet = pet;
    }

    @Input
    public String getPet() {
        return pet;
    }

    @TaskAction
    public void print() {
        getLogger().quiet("'{}' are awesome!", pet);
    }
}

তারপরে এটি নিবন্ধ করুন:

task printPet(type: PrintPet)

এখন আপনি এটি করতে পারেন:

./gradlew printPet --pet="puppies"

আউটপুট:

কুকুরছানা! অসাধারণ!

কোটলিন সমাধান

open class PrintPet : DefaultTask() {

    @Suppress("UnstableApiUsage")
    @set:Option(option = "pet", description = "The cute pet you would like to print out")
    @get:Input
    var pet: String = ""

    @TaskAction
    fun print() {    
        println("$pet are awesome!")
    }
}

তারপরে টাস্কটি নিবন্ধ করুন:

tasks.register<PrintPet>("printPet")

6

যদি আপনার একটি যুক্তি পরীক্ষা করতে এবং সেট করতে হয় তবে আপনার build.gradleফাইলটি এমন হবে:

....

def coverageThreshold = 0.15

if (project.hasProperty('threshold')) {
    coverageThreshold = project.property('threshold').toString().toBigDecimal()
}

//print the value of variable
println("Coverage Threshold: $coverageThreshold")
...

এবং উইন্ডোতে নমুনা কমান্ড:

গ্রেডলিউন ক্লিন টেস্ট -পরিসরহোল্ড = 0.25


4

আমি একটি কোডের টুকরো লিখেছি যা কমান্ড লাইন আর্গুমেন্টগুলিকে গ্রেডের প্রত্যাশা ফর্ম্যাটে রাখে।

// this method creates a command line arguments
def setCommandLineArguments(commandLineArgs) {
    // remove spaces 
    def arguments = commandLineArgs.tokenize()

            // create a string that can be used by Eval 
            def cla = "["
            // go through the list to get each argument
            arguments.each {
                    cla += "'" + "${it}" + "',"
            }

    // remove last "," add "]" and set the args 
    return cla.substring(0, cla.lastIndexOf(',')) + "]"
}

আমার কাজটি দেখতে এমন দেখাচ্ছে:

task runProgram(type: JavaExec) {
    if ( project.hasProperty("commandLineArgs") ) {
            args Eval.me( setCommandLineArguments(commandLineArgs) )
    }
}

কমান্ড লাইন থেকে তর্কগুলি পাস করার জন্য আপনি এটি চালান:

gradle runProgram -PcommandLineArgs="arg1 arg2 arg3 arg4"    

1

এখানে একটি দুর্দান্ত উদাহরণ রয়েছে:

https://kb.novaordis.com/index.php/Gradle_Pass_Configration_on_Command_Line

কোনও বিবরণ যা আপনি প্যারামিটারগুলি পাস করতে পারেন এবং তারপরে কোনও এক্সট ভেরিয়েবলের মতো একটি ডিফল্ট সরবরাহ করতে পারেন:

gradle -Dmy_app.color=blue

এবং তারপরে গ্রেডলে রেফারেন্স হিসাবে:

ext {
   color = System.getProperty("my_app.color", "red");
}

এবং তারপরে আপনার বিল্ড স্ক্রিপ্টের যে কোনও জায়গায় আপনি এটিকে অবশ্যই হিসাবে উল্লেখ করতে পারেন হিসাবে এটি উল্লেখ করতে পারেন project.ext.color

আরও টিপস এখানে: https://kb.novaordis.com/index.php/ গ্রেড_ভেরিয়েবলস_আর_প্রপার্টি


-4

কমান্ড লাইন থেকে একটি ইউআরএল পাস করুন আপনার ইউআরএলকে অ্যাপ গ্রেড ফাইলটিতে রেসভ্যালু "স্ট্রিং", "ইউআরএল", সাধারণ ইউআরএল অনুসারে রাখুন

এবং গ্রেডল.প্রপার্টি ফাইলগুলিতে একটি প্যারামিটার দিন নিম্নরূপ হিসাবে সাধারণ ইউআরএল = "আপনার ইউআরএল এখানে রাখুন বা খালি থাকতে পারে"

এবং হিসাবে অনুসরণ করে কম্যান্ড লাইন থেকে একটি কমান্ড পাস gradle assembleRelease -Pcommanurl = আপনার URL এখানে রাখুন

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