Gradle 작업-Java 애플리케이션에 인수 전달
사용자 지정 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'
다음을 포함하십시오 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'
}
그런 다음 실행하려면 : 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']"
너무 늦게 대답해서 죄송합니다.
@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"]
}
You can find the solution in Problems passing system properties and parameters when running Java class via Gradle . Both involve the use of the args
property
Also you should read the difference between passing with -D
or with -P
that is explained in the Gradle documentation
Of course the answers above all do the job, but still i would like to use something like
gradle run path1 path2
well this can't be done, but what if we can:
gralde run --- path1 path2
If you think it is more elegant, then you can do it, the trick is to process the command line and modify it before gradle does, this can be done by using init scripts
The init script below:
- Process the command line and remove --- and all other arguments following '---'
- Add property 'appArgs' to gradle.ext
So in your run task (or JavaExec, Exec) you can:
if (project.gradle.hasProperty("appArgs")) {
List<String> appArgs = project.gradle.appArgs;
args appArgs
}
The init script is:
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
Limitations:
- I was forced to use '---' and not '--'
- You have to add some global init script
If you don't like global init script, you can specify it in command line
gradle -I init.gradle run --- f:/temp/x.xml
Or better add an alias to your shell:
gradleapp run --- f:/temp/x.xml
You need to pass them as args
to the task using project properties, something like:
args = [project.property('h')]
added to your task definition (see the dsl docs)
Then you can run it as:
gradle -Ph run
참고URL : https://stackoverflow.com/questions/27604283/gradle-task-pass-arguments-to-java-application
'programing tip' 카테고리의 다른 글
변수가 배열인지 감지하는 방법 (0) | 2020.08.19 |
---|---|
중첩 된 JSON 객체-모든 것에 배열을 사용해야합니까? (0) | 2020.08.19 |
Python 유니 코드 인코딩 오류 (0) | 2020.08.19 |
IE9를 쿼크 모드로 전환하는 HTML5 doctype? (0) | 2020.08.19 |
DIV를 서로 겹쳐서 쌓으시겠습니까? (0) | 2020.08.19 |