@xtccc
2016-07-01T23:57:57.000000Z
字数 1744
阅读 3025
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
那么,我们可以有两种方法:
distribution
Zip
类型的任务来实现相同的功能使用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'), 必须使用include
from('src/dist/bin') {
include '*.sh' // 只针对src/dist/*.sh文件
fileMode 0755 // 要求对zip包解压后这些*.sh文件的权限是755, 不要忘记前面的0
into 'bin'
}
from(jar) {
into 'bin'
}
}
运行命令./gradlew clean buildZip
即可。
在上面的例子中,生成的ZIP包内有文件bin/startup.sh
,如果我们希望将它的权限改为777
,该怎么办?