Gradle 如何访问文件复制筛选器任务中的行号?
这就是我需要的: 我的javascript文件中有日志语句,它们如下所示: log.dsome日志消息在这里 我想在复制任务期间动态地向这些文件添加好的名称和行号。 好的,所以添加文件名可能很容易,但是如何访问行号呢?奇怪的是,我找不到任何关于如何做到这一点的信息 Copy任务的filter方法只是传递实际的行,如果它传递两个参数——行和行号,那就更好了 这是我的任务模板。我补充了我需要达到的目标 我知道我可以使用fileCpyDetails.getSourceName从fileCopyDetails获取文件名,但我被卡住了 介绍如何使用具有行号的新log.d语句替换以log.d开头的行 我真的希望有人能帮我Gradle 如何访问文件复制筛选器任务中的行号?,gradle,Gradle,这就是我需要的: 我的javascript文件中有日志语句,它们如下所示: log.dsome日志消息在这里 我想在复制任务期间动态地向这些文件添加好的名称和行号。 好的,所以添加文件名可能很容易,但是如何访问行号呢?奇怪的是,我找不到任何关于如何做到这一点的信息 Copy任务的filter方法只是传递实际的行,如果它传递两个参数——行和行号,那就更好了 这是我的任务模板。我补充了我需要达到的目标 我知道我可以使用fileCpyDetails.getSourceName从fileCopyDeta
task addLineNumbers(type: Copy) {
into 'build/deploy'
from 'source'
eachFile { fileCopyDetails ->
// Here I need to add line number to log.d("message")
// to become log.d("[$fileName::$line] + $message")
// for example, if original line in userdetails.js file was log.d("something logged here")
// replace with log.d("[userdetails.js::43] something logged here")
}
}
复制任务只是复制文件,它可以使用或Groovy过滤/扩展文件。您正在寻找某种预处理器。我认为用一个定制的Ant过滤器可以做到这一点,但这似乎需要做很多工作
我认为人们通常会在运行时使用类似的方法来查找文件/行号:不是最优雅的解决方案,但对我来说很有用:
task addLineNumbers(type: Copy) {
into 'build/deploy'
from 'source'
def currentFile = ""
def lineNumber = 1
eachFile { fileCopyDetails ->
currentFile = fileCopyDetails.getSourceName()
lineNumber = 1
}
filter { line ->
if (line.contains('log.d("')) {
line = line.replace('log.d("', "log.d(\"[${currentFile}::${lineNumber}]")
}
lineNumber++
return line
}
}
我正在使用一种技巧在运行时确定文件名和行号,但它效率低下,这正是我试图用构建脚本解决的问题,因此我不必在生产中使用这种技巧。您可能希望为此实现自己的任务,而不是使用复制任务。实现Ant FilterReader将是另一种选择。