Rec*_*nes 105 java arguments gradle
我有一个使用自定义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.
Run Code Online (Sandbox Code Playgroud)
Gradle任务看起来像:
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)
我试过跑gradle run -h
,但是不起作用.
xlm*_*xlm 92
更新:
Gradle 4.9为传递命令行参数提供了更好的支持,例如:
plugins {
// Implicitly applies Java plugin
id: 'application'
}
application {
// URI of your main class/application's entry point (required)
mainClassName = 'org.gradle.sample.Main'
}
Run Code Online (Sandbox Code Playgroud)
Pre-Gradle 4.9,将以下内容添加到build.gradle
:
run {
if (project.hasProperty("appArgs")) {
args Eval.me(appArgs)
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行: gradle run --args='arg1 arg2'
AMi*_*ing 57
从Gradle 4.9开始,命令行参数可以与--args一起传递.例如,如果要使用命令行参数启动应用程序foo --bar
,则可以使用
gradle run --args ='foo --bar'
Rec*_*nes 27
很抱歉这么晚回答.
我找到了@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
}
Run Code Online (Sandbox Code Playgroud)
并调用如下:
gradle run -Pmyargs=-d,s
Run Code Online (Sandbox Code Playgroud)
小智 22
如果您想一直使用相同的参数集,那么您只需要以下内容.
run {
args = ["--myarg1", "--myarg2"]
}
Run Code Online (Sandbox Code Playgroud)
小智 5
当然,最重要的是答案可以完成工作,但是我仍然想使用类似
gradle run path1 path2
Run Code Online (Sandbox Code Playgroud)
好吧,这不可能完成,但是如果可以的话:
gralde run --- path1 path2
Run Code Online (Sandbox Code Playgroud)
如果您认为它更优雅,则可以这样做,诀窍是在gradle之前处理命令行并对其进行修改,这可以通过使用init脚本来完成
下面的初始化脚本:
因此,在您的运行任务(或JavaExec,Exec)中,您可以:
if (project.gradle.hasProperty("appArgs")) {
List<String> appArgs = project.gradle.appArgs;
args appArgs
}
Run Code Online (Sandbox Code Playgroud)
初始化脚本是:
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
Run Code Online (Sandbox Code Playgroud)
局限性:
如果您不喜欢全局初始化脚本,则可以在命令行中指定它
gradle -I init.gradle run --- f:/temp/x.xml
Run Code Online (Sandbox Code Playgroud)
或更好地为您的外壳添加别名:
gradleapp run --- f:/temp/x.xml
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
82376 次 |
最近记录: |