web-gelistirme-sc.com

Argümanları komut satırından gradle'a geçirmek

Bir argümanı komut satırından Java sınıfına aktarmaya çalışıyorum. Bu gönderiyi izledim: http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html ancak kod benim için çalışmıyor (belki de değil JavaExec için mi?). İşte denedim:

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
    }
    */
}

Yukarıdaki sabit kodlanmış args değerinden çıktı:

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

Ancak, hasProperty bölümünü kullanmak için kodu değiştirip komut satırında argüman olarak "demo" yazıp bir NullPointerException alıyorum:

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/dosya/n5709919/testgradle.Zip adresinde bulunan ve sorunu gösteren basit bir test projesi var.

Bu Gradle 1.0-rc-3 kullanıyor. NullPointer bu kod satırındandır:

args group 

Görev tanımından önce aşağıdaki ödevi ekledim, ancak sonucu değiştirmedi:

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

Kepçe için komut satırı argümanlarının nasıl geçileceğine dair işaretçiler takdir eder.

81
Lidia

project.group önceden tanımlanmış bir özelliktir. -P ile yalnızca değil önceden tanımlanmış proje özelliklerini ayarlayabilirsiniz. Alternatif olarak, Java sistem özelliklerini (-D) ayarlayabilirsiniz.

55

Peter N'in cevabına dayanarak, bu bir JavaExec görevi için Java main'e (isteğe bağlı) 'args' özelliğini manüel olarak ayarlayamadığınızdan, kullanıcı tanımlı argümanların nasıl ekleneceğini gösteren bir örnektir. alıntı yapmasının nedeni.)

Bunu göreve ekle:

task(runProgram, type: JavaExec) {

  [...]

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

... ve bunun gibi komut satırında çalıştırın

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

İki argümanlı programım, args [0] ve args [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]);

benim build.gradle

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

terminalim İstemi:

gradle run  -PappArgsWhatEverIWant="['localhost','8080']"
26
Oscar Raig Colon

Gradle 4.9'dan itibaren Uygulama eklentisi --args seçeneğini anlar, bu nedenle argümanları iletmek şu kadar basittir:

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);
    }
}

deneme

./gradlew run --args='This string will be passed into my.Class arguments'
9
madhead

Komut satırı argümanlarını gradle'ın beklediği biçimde koyan bir kod parçası yazdım.

// 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(',')) + "]"
}

görevim şuna benziyor:

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

Argümanları komut satırından iletmek için şunu çalıştırın:

gradle runProgram -PcommandLineArgs="arg1 arg2 arg3 arg4"    
3
Sebastian Musial

Gradle'da özel komut satırı seçeneklerini kullanmak, aşağıdaki gibi bir şeyle sonuçlanabilir:

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

Ancak, Gradle'deki özel komut satırı seçenekleri bir inkübasyon özelliği .

Java çözümü

Bunun gibi bir şeyle sonuçlanmak için talimatları takip edin burada

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);
    }
}

O zaman kayıt olun:

task printPet(type: PrintPet)

Şimdi yapabilirsin:

./gradlew printPet --pet="puppies"

çıktı:

Yavrular! harikalar!

Kotlin çözümü

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!")
    }
}

sonra görevi şu şekilde kaydedin:

tasks.register<PrintPet>("printPet")
3
David Rawson