使用Gradle打包时,需要将手写的服务启动脚本放到压缩包中,本来只需要简单的代码就可以了。
applicationDistribution.from('src/script/runServer.sh'){
into "bin"
}
但是实际项目中,项目名可配,版本可配。服务器上的部署的目录就带有项目名和版本信息,比如实际项目目录是/data0/projName-1.2.3/。为了让脚本能正常使用,我的构想是维护一个脚本模板,模板中使用两个变量来表示项目名和版本信息,然后在打包时,根据Gradle配置文件中的项目名和版本信息,来替换脚本模板中的变量,生成脚本文件。最后将生成的脚本文件打到包中。
这就切题了--使用Gradle修改文件内容并重命名。
我的实现如下
#!/bin/bash projName="@gradleProjName@" projVersion="@gradleVersion@" projFolder=${projName}-${projVersion}
runServer.model
applicationName='projName' app_version='1.2.3' import org.apache.tools.ant.filters.ReplaceTokens task genShell(type: Copy) { from 'src/script/' include 'runServer.model' into 'src/script/' rename ('runServer.model','runServer.sh') filter (ReplaceTokens, tokens: [ gradleProjName: applicationName, gradleVersion: app_version ]) }
build.gradle
注:使用Gradle版本2.14.1