그라들 태스크 - Java 응용 프로그램에 인수를 전달합니다.
커스텀 그래들태스크와 함께 실행되는 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.
그래들 태스크는 다음과 같습니다.
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
나는 달리기를 시도했다.gradle run -h
효과가 없습니다.
그라들 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']"
Gradle 4.9 이후 명령줄 인수는 --args로 전달할 수 있습니다.예를 들어 명령줄 인수를 사용하여 응용 프로그램을 시작하려는 경우foo --bar
, 를 사용할 수 있습니다.
gradle run --bars='foo --bar'
항상 같은 인수 세트를 사용하는 경우는, 다음의 조작만으로 충분합니다.
run {
args = ["--myarg1", "--myarg2"]
}
답장이 늦어서 죄송합니다.
나는 @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
해결 방법은 Gradle을 통해 Java 클래스를 실행할 때 시스템 속성 및 매개 변수를 전달하는 문제에서 찾을 수 있습니다. 둘 다 를 사용하는 것과 관련이 있습니다.args
소유물
또, 패스와의 차이도 읽어 주세요.-D
또는 을 사용하여-P
Gradle 문서에 설명되어 있습니다.
물론 위의 답변이 그 역할을 하지만, 그래도 나는 다음과 같은 것을 사용하고 싶다.
gradle run path1 path2
그럴 수는 없지만, 만약 우리가 할 수 있다면요?
gralde run --- path1 path2
보다 우아하다고 생각되면 실행할 수 있습니다.그래들 전에 명령줄을 처리하여 수정하는 것이 중요합니다.이것은 init 스크립트를 사용하여 실행할 수 있습니다.
다음 init 스크립트는 다음과 같습니다.
- 명령줄 처리 후 --- 및 '---' 뒤에 오는 모든 인수를 삭제합니다.
- gradle에 속성 'appArgs'를 추가합니다.익스텐트
따라서 실행 태스크(또는 JavaExec, Exec)에서 다음을 수행할 수 있습니다.
if (project.gradle.hasProperty("appArgs")) {
List<String> appArgs = project.gradle.appArgs;
args appArgs
}
init 스크립트는 다음과 같습니다.
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')]
그 후 다음과 같이 실행할 수 있습니다.
gradle -Ph run
언급URL : https://stackoverflow.com/questions/27604283/gradle-task-pass-arguments-to-java-application
'source' 카테고리의 다른 글
MySql에서 DATETIME 필드의 날짜 부분에 인덱스를 만드는 방법 (0) | 2022.09.22 |
---|---|
Vue.js의 'data:'와 'data()'의 차이점은 무엇입니까? (0) | 2022.09.22 |
문자열에서 숫자 추출 - StringUtils Java (0) | 2022.09.22 |
PHP: 정의되지 않은 어레이 키를 처리하는 가장 빠른 방법 (0) | 2022.09.22 |
Mac용 최고의 PHP IDE? (무료인 것이 좋습니다!) (0) | 2022.09.22 |