Подтвердить что ты не робот

Gradle задача - передать аргументы Java-приложению

У меня есть приложение Java, которое работает с пользовательской задачей gradle, и при вызове приложения требуются некоторые аргументы. Это:

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.

Gradle задача выглядит так:

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

Я пробовал работать gradle run -h, и он не работает.

4b9b3361

Ответ 2

Gradle 4. 9+

Включите в свой build.gradle следующее:

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

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

Затем запустить: gradle run --args='arg1 arg2'

Pre-Gradle 4.9

Включите в свой build.gradle следующее:

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

Затем запустить: gradle run -PappArgs="['arg1', 'args2']"

Ответ 3

Извините за ответ так поздно.

Я решил ответить на @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

Ответ 4

Если вы хотите использовать один и тот же набор аргументов все время, вам понадобится следующее.

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

Ответ 6

Конечно ответы прежде всего делают работу, но все же я хотел бы использовать что-то вроде

gradle run path1 path2

ну, это не может быть сделано, но что, если мы можем:

gralde run --- path1 path2

Если вы думаете, что это более элегантно, тогда вы можете сделать это, хитрость заключается в том, чтобы обработать командную строку и изменить ее до того, как это сделает gradle, это можно сделать с помощью сценариев инициализации

Сценарий инициализации ниже:

  1. Обработайте командную строку и удалите --- и все остальные аргументы после '---'
  2. Добавьте свойство appArgs в gradle.ext

Таким образом, в вашей задаче запуска (или JavaExec, Exec) вы можете:

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. Вы должны добавить глобальный скрипт инициализации

Если вам не нравится глобальный скрипт инициализации, вы можете указать его в командной строке

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

Или лучше добавьте псевдоним в свою оболочку:

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

Ответ 7

Вам нужно передать их как args в задачу с использованием свойств проекта, например:

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

добавлен в определение задачи (см. dsl docs)

Затем вы можете запустить его как:

gradle -Ph run