Gradle processResources破坏了.jks

时间:2016-05-02 17:46:14

标签: gradle

我希望这是一个简单的问题,我没有找到答案的运气。

我希望build.gradle文件通过替换某些变量来设置Spring Boot应用程序中的版本。这与宣传的一样:

def tokens = [
    "version": 'project.version.toString()',
    "projectName": project.name,
    "groupId": rootProject.group,
    "artifactId": project.name
]
processResources{
    filter (ReplaceTokens, tokens: tokens)
    outputs.upToDateWhen{ false }
}

然而,这段代码也取代了我在资源中包含的java密钥库中的某些内容,这会破坏它。当我使用蚂蚁匹配器来排除任何不想要替换的文件时,不会复制任何其他内容。即包括' *。属性'

有没有办法只在某些文件上替换令牌,同时仍然复制资源目录中的其余文件?我是否需要为非属性文件定义单独的复制任务?

谢谢!

2 个答案:

答案 0 :(得分:3)

解决方案是在执行任务processReousrces时跳过任何二进制文件。例如,我使用expand()用gradle脚本中计算的值替换文本文件中的标记。所以,

  1. 跳过jks文件
  2. 将其移至二进制资源
  3. 这是我如何跳过目录src/main/resources/certs/下的文件。 doLast()保证jks文件在完成资源后被复制到适当的位置。

    ext {
      commit = 'git rev-parse --short HEAD'.execute().text.trim()
      branch = 'git rev-parse --abbrev-ref --symbolic HEAD'.execute().text.trim()
    }
    
    /**
     * Processes the resources, excluding the certs while building.
     */
    processResources {
      // Exclude the certs files to be processed as text
      exclude "**/certs/*"
    
      expand(
        timestamp: new Date(),
        commit: commit,
        branch: branch,
        version: project.version
      )
    
      // Copy the jks file to the resources (classpath)
      doLast {
        copy {
          from "src/main/resources/certs/server.jks"
          into "$buildDir/classes/main/certs"
        }
      }
    }
    

答案 1 :(得分:0)

processResources {
    filesNotMatching("**/certs/*") {
       expand(
         timestamp: new Date(),
         commit: commit,
         branch: branch,
         version: project.version
       )
    }
}

我今天遇到了同样的问题,并且在以下地方找到了此解决方案:https://stackoverflow.com/a/36731250/2611959