代码之家  ›  专栏  ›  技术社区  ›  doublep

以编程方式在Gradle构建脚本中创建文件

  •  2
  • doublep  · 技术社区  · 7 年前

    在我的 build.gradle 我想要 processResources 创建一个由Java程序加载的资源文件的任务。

    processResources {
        ...
    
        // This is a collection of files I want to copy into resources.
        def extra = configurations.extra.filter { file -> file.isFile () }
    
        // This actually copies them to 'classes/extra'. It works.
        into ('extra') {
            from extra
        }
    
        doLast {
            // I want to write this string (list of filenames, one per
            // line) to 'classes/extra/list.txt'.
            println extra.files.collect { file -> file.name }.join ("\n")
        }
    }
    

    你可以看到上面的 println 这正是我需要的。但是如何将这个字符串写入文件而不是控制台?

    2 回复  |  直到 7 年前
        1
  •  4
  •   M.Ricciuti    7 年前

    实现这一点的一种方法是定义一个自定义任务,该任务将从 配置,并使现有 processResources 任务依赖于此自定义任务。

    // Task that creates the index file which lists all extra libs
    task createExtraFilesIndex(){
        // destination directory for the index file
        def indexFileDir = "$buildDir/resources/main"
        // index filename
        def indexFileName = "extra-libs.index"
        doLast{
            file(indexFileDir).mkdirs()
            def extraFiles = configurations.extra.filter { file -> file.isFile () }
            // Groovy concise syntax for writing into file; maybe you want to delete this file first.
            file( "$indexFileDir/$indexFileName") << extraFiles.files.collect { file -> file.name }.join ("\n")
        }
    }
    
    // make  processResources depends on createExtraFilesIndex task
    processResources.dependsOn createExtraFilesIndex
    
        2
  •  4
  •   miskender    7 年前

    您可以使用以下代码

    task writeToFile {
      // sample list.(you already have it as extra.files.collect { file -> file.name })
      List<String> sample = [ 'line1','line2','line3' ] as String[]  
      // create the folders if it does not exist.(otherwise it will throw exception)
      File extraFolder = new File( "${project.buildDir}/classes/extra")
      if( !extraFolder.exists() ) {
        extraFolder.mkdirs()
      }
      // create the file and write text to it.
      new File("${project.buildDir}/classes/extra/list.txt").text = sample.join ("\n")
    }
    
    推荐文章