カスタム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'
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 scripts を使用して行うことができます
以下のinitスクリプト:
したがって、実行タスク(または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')]
タスク定義に追加( dsl docs を参照)
その後、次のように実行できます。
gradle -Ph run