我有一个Gradle构建脚本,我试图在其中包含Eric Wendelin's 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()
}
这是完美的-当我运行gradle war任务时,它调用minifyCss任务,获取源css文件,并在buildDir中创建一个缩小版本
然而,我有一些css文件需要缩小,但不需要合并成一个文件(因此我没有使用combineCss任务)
我希望能够做的是使source和dest属性(假设这是正确的术语?))的minifyCss任务引用变量的某种类型-要么变量传入任务中的签名,或全局变量,或东西...
我猜是这样的(这不起作用):
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()
}
对于我的生活,我无法解决如何调用任务并传递变量:(
任何帮助非常感谢;
7条答案
按热度按时间lzfw57am1#
您应该考虑在调用Gradle时传递-P参数。
Gradle Documentation:
--project-prop设置根项目的项目属性,例如-Pmyprop=myvalue。请参见第14.2节“Gradle属性和系统属性”。
考虑到这个构造gradle
调用
Gradle -PcustomProp=myProp
将给予以下输出:这是我发现的传递参数的方法。
zrfyljdw2#
如果要传递参数的任务类型为
JavaExec
,并且您正在使用Gradle 5,例如应用程序插件的run
任务,则可以通过--args=...
命令行选项传递参数。例如gradle run --args="foo --bar=true"
。否则没有方便的内置方式来做到这一点,但有3个变通方法。
1.如果值少,则创建任务函数
如果可能的值很少并且是预先已知的,则可以以编程方式为每个值创建一个任务:
然后,您可以按以下方式调用任务:
2.标准输入hack
一个方便的方法是通过标准输入传递参数,并让您的任务从中读取:
代码如下:
您还需要在构建脚本的顶部添加以下行:
3. -P参数
最后一个选项是将
-P
参数传递给Gradle:然后,您可以在构建脚本中以
myArg
的形式访问它:sulc1iza3#
我建议使用Gradle forum上的方法:
我自己也用过这种方法来创建自定义任务,效果非常好。
2izufjch4#
tcbh2hod5#
没有什么比这更容易的了。
运行命令:./gradlew clean -PjobId=9999
和/或
在用途:println(project.gradle.startParameter.projectProperties)
你会得到线索。
bvn4nwqk6#
我认为您可能希望将每组CSS的缩小视为一项单独的任务
顺便说一句,在战争任务的行动中执行你的缩小任务对我来说似乎很奇怪--让它们成为战争任务的依赖不是更有意义吗?
laik7k3q7#
下面是Kotlin DSL的解决方案(build.gradle.kts)。
我首先尝试将变量作为属性获取,如果它是
null
,则尝试从OS环境变量获取它(在GitHub Actions等CI中可能很有用)。然后,我们可以从命令行传递属性的值:
或者在项目的根目录下创建一个名为 * local.properties * 的文件,并设置属性:
我们也可以用我们想要的值命名为
SONG_NAME
的add an env variable,然后运行任务: