Gradle 如何访问文件复制筛选器任务中的行号?

Gradle 如何访问文件复制筛选器任务中的行号?,gradle,Gradle,这就是我需要的: 我的javascript文件中有日志语句,它们如下所示: log.dsome日志消息在这里 我想在复制任务期间动态地向这些文件添加好的名称和行号。 好的,所以添加文件名可能很容易,但是如何访问行号呢?奇怪的是,我找不到任何关于如何做到这一点的信息 Copy任务的filter方法只是传递实际的行,如果它传递两个参数——行和行号,那就更好了 这是我的任务模板。我补充了我需要达到的目标 我知道我可以使用fileCpyDetails.getSourceName从fileCopyDeta

这就是我需要的:

我的javascript文件中有日志语句,它们如下所示:

log.dsome日志消息在这里

我想在复制任务期间动态地向这些文件添加好的名称和行号。 好的,所以添加文件名可能很容易,但是如何访问行号呢?奇怪的是,我找不到任何关于如何做到这一点的信息

Copy任务的filter方法只是传递实际的行,如果它传递两个参数——行和行号,那就更好了

这是我的任务模板。我补充了我需要达到的目标

我知道我可以使用fileCpyDetails.getSourceName从fileCopyDetails获取文件名,但我被卡住了 介绍如何使用具有行号的新log.d语句替换以log.d开头的行 我真的希望有人能帮我

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将是另一种选择。