def voidforceVersion(details, group, version) {if (details.requested.group ==group) {
details.useVersion version
}
}
defvoidforceVersion(details, group, name, version) {if (details.requested.group == group && details.requested.name ==name) {
details.useVersion version
}
}
allprojects { p->group= 'com.my.spider'version= '1.0.0'apply plugin:'java'apply plugin:'maven'apply plugin:'maven-publish'[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'jar.doFirst {
manifest {
def manifestFile= "${projectDir}/META-INF/MANIFEST.MF"
if (newFile(manifestFile).exists())
from (manifestFile)
attributes'Implementation-Title':p.nameif (p.version.endsWith('-SNAPSHOT')) {
attributes'Implementation-Version': p.version + '-' +p.ext.Timestamp
}else{
attributes'Implementation-Version': p.version
}
attributes'Implementation-BuildDateTime':newDate()
}
}
javadoc {
options {
encoding'UTF-8'charSet'UTF-8'authorfalseversiontruelinks'http://docs.oracle.com/javase/8/docs/api/index.html'memberLevel=org.gradle.external.javadoc.JavadocMemberLevel.PRIVATE
}
}if (p.name.endsWith('-api')){
task sourcesJar(type:Jar, dependsOn:classes) {
classifier= 'sources'from sourceSets.main.allSource
}
task javadocJar(type:Jar, dependsOn:javadoc) {
classifier= 'javadoc'from javadoc.destinationDir
}
}
publishing {
repositories {
maven {
credentials {
username"${repositoryUploadUsername}"password"${repositoryUploadPassword}"}if (version.endsWith('-SNAPSHOT')) {
url"${repositoryUploadSnapshotUrl}"}else{
url"${repositoryUploadReleaseUrl}"}
}
}
publications {
mavenJava(MavenPublication) {
from components.java//只有*-api才会需要发布sources和javadoc
if (p.name.endsWith('-api')){
artifact sourcesJar {
classifier"sources"}
artifact javadocJar {
classifier"javadoc"}
}
}
}
}if(System.env.uploadArchives) {
build.dependsOn publish
}
buildscript {
repositories {
maven {
name'Maven Repository'url"${repositoryMavenUrl}"credentials {
username"${repositoryUsername}"password"${repositoryPassword}"}
}
}
dependencies {classpath'org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE'}
}
afterEvaluate {Project project->
if (project.pluginManager.hasPlugin('java')) {
configurations.all {
resolutionStrategy.eachDependency {DependencyResolveDetails details->forceVersion details,'org.springframework.boot', '1.4.1.RELEASE'forceVersion details,'org.slf4j', '1.7.21'forceVersion details,'org.springframework', '4.3.3.RELEASE'}
exclude module:'slf4j-log4j12'exclude module:'log4j'}
dependencies {testCompile'junit:junit:4.12'}
}
}
repositories {
maven {
name'Maven Repository'url"${repositoryMavenUrl}"credentials {
username"${repositoryUsername}"password"${repositoryPassword}"}
}
ivy {
name'Ivy Repository'url"${repositoryIvyUrl}"credentials {
username"${repositoryUsername}"password"${repositoryPassword}"}
layout"pattern", {
artifact'[organisation]/[module]/[revision]/[type]s/[artifact]-[revision].[ext]'ivy'[organisation]/[module]/[revision]/[type]s/[artifact].[ext]'m2compatible= true}
}
}//时间戳:年月日时分
p.ext.Timestamp = new Date().format('yyyyMMddHHmm')//Build Number
p.ext.BuildNumber =System.env.BUILD_NUMBERif (p.ext.BuildNumber == null || "" ==p.ext.BuildNumber) {
p.ext.BuildNumber= 'x'}
}
task zipSources(type: Zip) {
description'压缩源代码'project.ext.zipSourcesFile= project.name + '-' + project.version + '-' + project.ext.Timestamp + '.' + project.ext.BuildNumber + '-sources.zip'archiveName=project.ext.zipSourcesFile
includeEmptyDirs= falsefrom project.projectDir
exclude'**/.*'exclude'build/*'allprojects.each { p->exclude'**/' + p.name + '/bin/*'exclude'**/' + p.name + '/build/*'exclude'**/' + p.name + '/data/*'exclude'**/' + p.name + '/work/*'exclude'**/' + p.name + '/logs/*'}
}
def CopySpec appCopySpec(Project prj, dstname= null) {if (!dstname) { dstname =prj.name }returncopySpec{//Fat jar
from (prj.buildDir.toString() + '/libs/' + prj.name + '-' + project.version + '.jar') {
into dstname
}//Configs
from (prj.projectDir.toString() + '/config/examples') {
into dstname+ '/config'}//Windows start script
from (prj.projectDir.toString() + '/' + prj.name + '.bat') {
into dstname
}//Unix conf script
from (prj.projectDir.toString() + '/' + prj.name + '.conf') {
into dstname
rename prj.name, prj.name+ '-' +project.version
}
}
}
task zipSetup(type: Zip, dependsOn: subprojects.build) {
description'制作安装包'project.ext.zipSetupFile= project.name + '-' + project.version + '-' + project.ext.Timestamp + '.' + project.ext.BuildNumber + '-setup.zip'archiveName= project.name + '-' + project.version + '-' + project.ext.Timestamp + '.' + project.ext.BuildNumber + '-setup.zip'with appCopySpec(project(':spider-demo'))
}importjava.security.MessageDigest
def generateMD5(finalfile) {
MessageDigest digest= MessageDigest.getInstance("MD5")
file.withInputStream(){is->
byte[] buffer = new byte[8192]int read = 0
while( (read = is.read(buffer)) > 0) {
digest.update(buffer,0, read);
}
}byte[] md5sum =digest.digest()
BigInteger bigInt= new BigInteger(1, md5sum)return bigInt.toString(16)
}
task md5(dependsOn: [zipSetup, zipSources])<
String md5_setup= generateMD5(file("${projectDir}/build/distributions/" +project.ext.zipSetupFile));
String md5_sources= generateMD5(file("${projectDir}/build/distributions/" +project.ext.zipSourcesFile));
println project.ext.zipSetupFile+ '=' +md5_setup
println project.ext.zipSourcesFile+ '=' +md5_sources
def newFile= new File("${projectDir}/build/distributions/"
+ project.name + '-' + project.version + '-' + project.ext.Timestamp + '.' + project.ext.BuildNumber + '-md5.txt')
PrintWriter printWriter=newFile.newPrintWriter()
printWriter.println project.ext.zipSetupFile+ '=' +md5_setup
printWriter.println project.ext.zipSourcesFile+ '=' +md5_sources
printWriter.flush()
printWriter.close()
}
build.dependsOn subprojects.build, zipSetup, zipSources, md5