사용자 지정 gradle 작업으로 실행되는 Java 응용 프로그램이 있으며 응용 프로그램이 호출되면 몇 가지 인수가 필요합니다. 이것들은:
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
하지 않습니다.
답변
Gradle 4.9부터 명령 줄 인수는 –args로 전달할 수 있습니다. 예를 들어 명령 줄 인수를 사용하여 애플리케이션을 시작하려면 foo --bar
다음을 사용할 수 있습니다.
gradle run –args = ‘foo –bar’
답변
Gradle 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'
}
Pre-Gradle 4.9
다음을 포함하십시오 build.gradle
.
run {
if (project.hasProperty("appArgs")) {
args Eval.me(appArgs)
}
}
그런 다음 실행하려면 : gradle run -PappArgs="['arg1', 'args2']"
답변
너무 늦게 대답해서 죄송합니다.
@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
답변
항상 동일한 인수 집합을 사용하려면 다음이 필요합니다.
run {
args = ["--myarg1", "--myarg2"]
}
답변
Gradle을 통해 Java 클래스를 실행할 때 시스템 속성 및 매개 변수를 전달하는 문제 에서 해결 방법을 찾을 수 있습니다 . 둘 다 args
재산 의 사용을 포함합니다
또한 당신과 함께 통과의 차이 읽어야 -D
이상에서 -P
설명 것을 Gradle을 문서에
답변
물론 위의 답변은 모두 작업을 수행하지만 여전히 다음과 같은 것을 사용하고 싶습니다.
gradle run path1 path2
글쎄, 이것은 할 수 없지만 우리가 할 수 있다면 어떨까요?
gralde run --- path1 path2
더 우아하다고 생각되면 할 수 있습니다. 트릭은 명령 줄을 처리하고 gradle이 수행하기 전에 수정하는 것입니다.이 작업은 init 스크립트 를 사용하여 수행 할 수 있습니다.
아래의 초기화 스크립트 :
- 명령 줄을 처리하고 — 및 ‘—‘뒤에 오는 다른 모든 인수를 제거합니다.
- gradle.ext에 속성 ‘appArgs’추가
따라서 실행 작업 (또는 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
제한 사항 :
- 나는 ‘-‘가 아니라 ‘—‘를 사용해야했습니다.
- 전역 초기화 스크립트를 추가해야합니다.
전역 초기화 스크립트가 마음에 들지 않으면 명령 줄에서 지정할 수 있습니다.
gradle -I init.gradle run --- f:/temp/x.xml
또는 셸에 별칭을 추가하는 것이 좋습니다.
gradleapp run --- f:/temp/x.xml
답변
args
다음과 같은 프로젝트 속성을 사용하여 작업 에 전달해야합니다 .
args = [project.property('h')]
작업 정의에 추가됨 ( dsl 문서 참조 )
그런 다음 다음과 같이 실행할 수 있습니다.
gradle -Ph run
