私はエリックウェンデリンのcssプラグインを含めようとしているgradleビルドスクリプトを持っています http://eriwen.github.io/gradle-css-plugin/
実装するのに十分簡単であり、(結合してgzip圧縮するのではなく)縮小のみが必要なため、ビルドスクリプトの適切な部分は次のようになります。
minifyCss {
source = "src/main/webapp/css/brandA/styles.css"
dest = "${buildDir}/brandA/styles.css"
yuicompressor {
lineBreakPos = -1
}
}
war {
baseName = 'ex-ren'
}
war.doFirst {
tasks.myTask.minifyCss.execute()
}
これは完璧です。gradlewarタスクを実行すると、minifyCssタスクが呼び出され、ソースのcssファイルが取得され、buildDirに縮小版が作成されます
ただし、縮小が必要なcssファイルがいくつかありますが、1つのファイルに結合しません(したがって、combinesCssタスクは使用していません)。
私ができることは、minifyCssタスク参照変数のsourceとdestプロパティを作成することです(それが正しい用語ですか?)-ある種の変数-シグネチャでタスクに渡される変数、またはグローバル変数、または何か ...
私が推測するこのようなもの(これは機能しません):
minifyCss(sourceFile, destFile) {
source = sourceFile
dest = destFile
yuicompressor {
lineBreakPos = -1
}
}
war {
baseName = 'ex-ren'
}
war.doFirst {
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandA/styles.css", "${buildDir}/brandA/styles.css")
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandB/styles.css", "${buildDir}/brandB/styles.css")
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandC/styles.css", "${buildDir}/brandC/styles.css")
}
これも機能しません:
def sourceFile = null
def destFile = null
minifyCss {
source = sourceFile
dest = destFile
yuicompressor {
lineBreakPos = -1
}
}
war {
baseName = 'ex-ren'
}
war.doFirst {
sourceFile = "src/main/webapp/css/brandA/styles.css"
destFile = "${buildDir}/brandA/styles.css"
tasks.myTask.minifyCss.execute()
}
私の人生では、タスクを呼び出して変数を渡す方法を理解することができません:(
どんな助けも大歓迎です。
私はあなたがおそらくCSSの各セットの縮小を別々のタスクとして見たいと思うと思います
task minifyBrandACss(type: com.eriwen.gradle.css.tasks.MinifyCssTask) {
source = "src/main/webapp/css/brandA/styles.css"
dest = "${buildDir}/brandA/styles.css"
}
etc etc
ちなみに、戦争タスクのアクションでミニファイタスクを実行するのは奇妙に思えます。戦争タスクに依存させる方が理にかなっているのではないでしょうか。
Gradleを呼び出すときに-P引数を渡すことを検討する必要があります。
--project-propルートプロジェクトのプロジェクトプロパティを設定します(例:-Pmyprop = myvalue)。セクション14.2「Gradleのプロパティとシステムのプロパティ」を参照してください。
このbuild.gradleを考慮する
task printProp << {
println customProp
}
Gradle -PcustomProp=myProp
を呼び出すと、次の出力が得られます。
$ gradle -PcustomProp=myProp printProp
:printProp
myProp
BUILD SUCCESSFUL
Total time: 3.722 secs
これは、パラメーターを渡すために私が見つけた方法です。
パラメータを渡すタスクのタイプがJavaExec
で、Gradle 5を使用している場合、たとえばアプリケーションプラグインのrun
タスクの場合、 --args=...
コマンドラインオプション を使用してパラメーターを指定します。たとえば、gradle run --args="foo --bar=true"
です。
それ以外の場合、これを行う便利な組み込み方法はありませんが、3つの回避策があります。
可能な値が少なく、事前にわかっている場合は、それらのそれぞれに対してタスクをプログラムで作成できます。
void createTask(String platform) {
String taskName = "myTask_" + platform;
task (taskName) {
... do what you want
}
}
String[] platforms = ["macosx", "linux32", "linux64"];
for(String platform : platforms) {
createTask(platform);
}
次に、タスクを次のように呼び出します。
./gradlew myTask_macosx
便利なハックは、標準入力を介して引数を渡し、そこからタスクを読み取ることです。
./gradlew myTask <<<"arg1 arg2 arg\ in\ several\ parts"
以下のコードで:
String[] splitIntoTokens(String commandLine) {
String regex = "(([\"']).*?\\2|(?:[^\\\\ ]+\\\\\\s+)+[^\\\\ ]+|\\S+)";
Matcher matcher = Pattern.compile(regex).matcher(commandLine);
ArrayList<String> result = new ArrayList<>();
while (matcher.find()) {
result.add(matcher.group());
}
return result.toArray();
}
task taskName, {
doFirst {
String typed = new Scanner(System.in).nextLine();
String[] parsed = splitIntoTokens(typed);
println ("Arguments received: " + parsed.join(" "))
... do what you want
}
}
ビルドスクリプトの先頭に次の行を追加する必要もあります。
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;
import Java.util.Scanner;
最後のオプションは、-P
パラメータをGradleに渡すことです。
./gradlew myTask -PmyArg=hello
その後、ビルドスクリプトでmyArg
としてアクセスできます。
task myTask {
doFirst {
println myArg
... do what you want
}
}
@ 789のクレジットを 引数をトークンに分割する際の回答
task mathOnProperties << {
println Integer.parseInt(a)+Integer.parseInt(b)
println new Integer(a) * new Integer(b)
}
$ gradle -Pa=3 -Pb=4 mathOnProperties
:mathOnProperties
7
12
BUILD SUCCESSFUL
Gradleフォーラム に提示されている方法をお勧めします。
def createMinifyCssTask(def brand, def sourceFile, def destFile) {
return tasks.create("minify${brand}Css", com.eriwen.gradle.css.tasks.MinifyCssTask) {
source = sourceFile
dest = destFile
}
}
私はこの方法を使用してカスタムタスクを作成しましたが、非常にうまく機能します。