@xtccc
2016-07-01T15:57:57.000000Z
字数 1744
阅读 3409

Gradle
参考:
目录
我们在发布产品时(称之为一个distribution),不仅仅是构建出一个Jar包就可以了,而是要包含其他的一些内容。最终发布的产品往往包含以下结构:
README.MD
conf
bin
其中, REDAME.MD是描述性文件,conf是配置文件,bin目录下则是一些构建出的Jar包,以及启动脚本startup.sh。
如果我们用gradle build命令,则只能在build/libs下生成一个jar包,里面只含有src/main目录下的代码。如果我们希望将其他的文件也放入到最终生成的distribution中,则可以使用插件distribution。
假设我们的项目版本是1.0-RELEASE,构建后会生成一个名为akka-1.0-RELEASE.jar的JAR包。
我们的项目结构为:

我们希望在发布产品时,对外发布一个名为distribution-1.0-RELAEASE.zip的文件,该文件解压后的内容为:
distribution-1.0-RELEASE├── bin│ ├── akka-1.0-RELEASE.jar│ └── startup.sh├── conf│ └── log4j.properties├── README.md└── startup.sh
那么,我们可以有两种方法:
distributionZip类型的任务来实现相同的功能使用distribution插件时,build.gradle文件需要添加下面的内容:
apply plugin: 'distribution'distributions {install { // install是 ${distribution.name}baseName = 'distribution'contents {into('conf') {from { 'src/main/resources' }}into('./') {from { 'src/dist/README.md' }}into('bin') {from { 'src/dist/startup.sh' }}into('bin') {from { jar }}}}}
在构建时,运行命令:
./gradlew clean build installDistZip
运行完成后,可以在目录build/distributions下面看到生成的zip文件。
解释一下我们命令中的installDistZip。这其实是我们定义的task name,形式为${distribution.name}DistZip。而build.gradle文件中的install是与此对应的。
如果不使用插件distribution,也可以自己定义一个Zip类型的任务。
task buildZip(type: Zip, dependsOn: build) {from('src/main/resources') {into 'conf'}from('src/dist/README.md') {into './'}// 不能写成 from('src/dist/bin/*.sh'), 必须使用includefrom('src/dist/bin') {include '*.sh' // 只针对src/dist/*.sh文件fileMode 0755 // 要求对zip包解压后这些*.sh文件的权限是755, 不要忘记前面的0into 'bin'}from(jar) {into 'bin'}}
运行命令./gradlew clean buildZip即可。
在上面的例子中,生成的ZIP包内有文件bin/startup.sh,如果我们希望将它的权限改为777,该怎么办?
