我有一个Gradle构建脚本,我试图将Eric Wendelin的CSS插件包含其中。
它很容易实现,因为我只想缩小(而不是合并和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()
}
这是完美的-当我运行gradle war任务时,它会调用mini fyCss任务,获取源css文件,并在buildDir中创建一个缩小版本
但是,我有一些需要缩小的css文件,但没有组合成一个文件(因此我没有使用组合Css任务)
我想做的是生成源和目标属性(假设这是正确的术语?)在minifyCss任务中,有一些类型的引用变量-要么是在签名中传递到任务中的变量,要么是html" target="_blank">全局变量,或者其他。。。
我猜是这样的(这行不通):
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()
}
就我的一生而言,我无法解决如何调用任务并在中传递变量:(
非常感谢任何帮助;
我建议采用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
}
}
我自己也使用过这种方法来创建自定义任务,效果很好。
如果要向其传递参数的任务类型为JavaExec,并且您正在使用Gradle 5,例如应用程序插件的运行任务,那么您可以通过命令行选项传递参数。例如,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;
最后一个选项是将参数传递给Gradle:
./gradlew myTask -PmyArg=hello
然后,您可以在构建脚本中以myArg的形式访问它:
task myTask {
doFirst {
println myArg
... do what you want
}
}
由于@789回答了将论点分解成令牌的问题,这要归功于他
您应该考虑在调用Gradle时传递-P参数。
来自Gradle文档:
--项目属性设置根项目的项目属性,例如-Pmyprop=myvalue。见第14.2节“梯度特性和系统特性”。
考虑到这build.gradle
task printProp << {
println customProp
}
调用Gradle-PcustomProp=myProp将得到以下输出:
$ gradle -PcustomProp=myProp printProp
:printProp
myProp
BUILD SUCCESSFUL
Total time: 3.722 secs
这是我找到的传递参数的方法。
我试图找到从命令行传递gradle任务参数的最佳方法。我有这个任务。我想从学生练习中解包解决方案,并将它们复制到项目中的正确位置,以突出它们。我这样称呼这个任务: 这是gradle任务: 你有什么建议来优化这个过程吗?
问题内容: 我有一个运行自定义gradle任务的Java应用程序,该应用程序在被调用时需要一些参数。这些是: Gradle任务如下所示: 我已尝试运行,但无法正常工作。 问题答案: 从Gradle 4.9开始,可以使用–args传递命令行参数。例如,如果要使用命令行参数启动应用程序,则可以使用 gradle run –args =’foo –bar’ 另请参阅Gradle应用程序插件 如何升级Gr
我试图将一个参数从命令行传递到java类。我关注了这篇文章:http://gradle.1045684.n5.nabble.com/gradle-application-plugin-question-td5539555.html,但是代码对我来说不起作用(也许它不适合JavaExec?)。以下是我所尝试的: 上面硬编码的args值的输出是: 任何关于如何将命令行参数传递给gradle的指针都很感
我试图在不同的浏览器下运行cumber测试,所以我有(是的,目前只有一个浏览器) 在这个TestNG runner类中,我可以从这个runner类中访问参数,但是我需要将这个变量传递给Cucumber,根据传递的变量创建浏览器实例。到目前为止,我在没有TestNG的情况下使用它,我通过环境变量传递这些变量,但是我假设如果我在不同的浏览器上并行运行测试,这将不起作用。 有没有办法做到这一点?
将函数绑定到按钮是简单明了的: 但我看不到一种向函数传递参数(参数)的方法,当我这样做时: 该函数在页面加载时调用,并且不再调用。 是否有可能将参数传递给从? null null 我只是找到了一个很奇怪的方法。从内联处理程序调用该函数可以工作。
要启动Java程序,我可以传递如下参数: 在gradle命令行中有哪些好的方法可以做到这一点: 这是正在建造的。格雷德尔: