237 lines
9.6 KiB
Groovy
237 lines
9.6 KiB
Groovy
apply plugin: 'maven-publish'
|
||
apply plugin: 'signing'
|
||
|
||
ext {
|
||
PUBLISH_GROUP_ID = rootProject.ext.mavenCentralGroupId
|
||
PUBLISH_VERSION = rootProject.ext.mavenVersion
|
||
}
|
||
|
||
|
||
//编译groovy代码时采用 UTF-8
|
||
tasks.withType(GroovyCompile) {
|
||
groovyOptions.encoding = "UTF-8"
|
||
}
|
||
//编译JAVA文件时采用UTF-8
|
||
tasks.withType(JavaCompile) {
|
||
options.encoding = "UTF-8"
|
||
}
|
||
|
||
// java doc 采用utf-8
|
||
// https://docs.gradle.org/current/dsl/org.gradle.api.tasks.javadoc.Javadoc.html#org.gradle.api.tasks.javadoc.Javadoc:options
|
||
tasks.withType(Javadoc) {
|
||
if (JavaVersion.current().isJava9Compatible()) {
|
||
options.addBooleanOption('html5', true)
|
||
}
|
||
options {
|
||
encoding "UTF-8"
|
||
charSet 'UTF-8'
|
||
// links "https://docs.oracle.com/javase/8/docs/api/"
|
||
addStringOption('Xdoclint:none', '-quiet') // 忽略检查@params 和 @return
|
||
}
|
||
}
|
||
|
||
ext["signing.keyId"] = null
|
||
ext["signing.password"] = null
|
||
ext["signing.secretKeyRingFile"] = null
|
||
ext["ossrhUsername"] = null
|
||
ext["ossrhPassword"] = null
|
||
|
||
File secretPropsFile = project.rootProject.file('local.properties')
|
||
if (secretPropsFile.exists()) {
|
||
println "Found secret props file, loading props"
|
||
Properties p = new Properties()
|
||
p.load(new FileInputStream(secretPropsFile))
|
||
p.each { name, value ->
|
||
ext[name] = value
|
||
}
|
||
} else {
|
||
println "No props file, loading env vars"
|
||
}
|
||
|
||
static def localMavenRepo() {
|
||
'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
|
||
}
|
||
|
||
def getReleaseRepositoryUrl() {
|
||
return isLocal() ? localMavenRepo()
|
||
: hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
|
||
: 'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/'
|
||
}
|
||
|
||
def getSnapshotRepositoryUrl() {
|
||
return isLocal() ? localMavenRepo()
|
||
: hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
|
||
: 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
|
||
}
|
||
|
||
def isLocal() {
|
||
return project.findProperty('ISLOCAL') == 'true'
|
||
}
|
||
|
||
afterEvaluate { project ->
|
||
if (isLocal()) {
|
||
println("上传到本地仓库")
|
||
} else {
|
||
println("上传到中央仓库")
|
||
}
|
||
publishing {
|
||
def isAndroidProject = project.plugins.hasPlugin('com.android.application') || project.
|
||
plugins.
|
||
hasPlugin('com.android.library')
|
||
publications {
|
||
release(MavenPublication) {
|
||
// groupId 等信息
|
||
groupId PUBLISH_GROUP_ID
|
||
artifactId project.PUBLISH_ARTIFACT_ID
|
||
version PUBLISH_VERSION
|
||
|
||
if (isAndroidProject) {
|
||
// 移除R文件,移除BuildConfig文件
|
||
project.tasks.findByName('generateReleaseBuildConfig')?.enabled = false
|
||
project.tasks.findByName('generateDebugBuildConfig')?.enabled = false
|
||
project.tasks.findByName('generateReleaseResValues')?.enabled = false
|
||
project.tasks.findByName('generateDebugResValues')?.enabled = false
|
||
// 使用了这个组件,就不需要自己aar、pom.withxml了
|
||
def releaseComponent = project.components.findByName('release')
|
||
if (releaseComponent != null) {
|
||
from releaseComponent
|
||
}
|
||
|
||
def variants = project.android.libraryVariants.findAll {
|
||
it.buildType.name.equalsIgnoreCase('debug')
|
||
}
|
||
|
||
def getAndroidSdkDirectory = project.android.sdkDirectory
|
||
|
||
def getAndroidJar = "${getAndroidSdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar"
|
||
|
||
def androidJavadocs = project.task("androidJavadocs", type: Javadoc, dependsOn: 'assembleDebug') {
|
||
println("开始打包aar")
|
||
source = variants.collect { it.getJavaCompileProvider().get().source }
|
||
classpath = project.files(
|
||
getAndroidJar,
|
||
project.file("build/intermediates/classes/debug")
|
||
)
|
||
doFirst {
|
||
classpath += project.files(variants.collect { it.javaCompileProvider.get().classpath.files })
|
||
}
|
||
options {
|
||
// links("https://docs.oracle.com/javase/8/docs/api/")
|
||
// linksOffline("http://d.android.com/reference", "${getAndroidSdkDirectory}/docs/reference")
|
||
encoding "UTF-8"
|
||
charSet 'UTF-8'
|
||
addStringOption('Xdoclint:none', '-quiet') // 忽略检查@params 和 @return
|
||
}
|
||
|
||
exclude '**/R.java'
|
||
exclude "**/BuildConfig.class"
|
||
}
|
||
|
||
def cleanJavadocTask = project.task("cleanJavadocTask", type: Delete) {
|
||
delete androidJavadocs.destinationDir
|
||
}
|
||
project.clean.dependsOn(cleanJavadocTask)
|
||
|
||
def androidJavadocsJar = project.task("androidJavadocsJar", type: Jar, dependsOn: androidJavadocs) {
|
||
archiveClassifier = 'javadoc'
|
||
archiveBaseName = "${JAR_PREFIX}${project.PUBLISH_ARTIFACT_ID}"
|
||
}
|
||
|
||
def androidSourcesJar = project.task("androidSourcesJar", type: Jar) {
|
||
archiveClassifier = 'sources'
|
||
from project.android.sourceSets.main.java.source
|
||
archiveBaseName = "${JAR_PREFIX}${project.PUBLISH_ARTIFACT_ID}"
|
||
|
||
exclude "**/R.class"
|
||
exclude "**/BuildConfig.class"
|
||
}
|
||
|
||
def compileDebugJavaWithJavac = project.tasks.findByName('compileDebugJavaWithJavac')
|
||
def androidLibraryJar = project.task("androidLibraryJar", type: Jar, dependsOn: 'compileDebugJavaWithJavac') {
|
||
// java 编译后的 class文件, build/intermediates/classes/debug/
|
||
if (compileDebugJavaWithJavac != null) {
|
||
from compileDebugJavaWithJavac.destinationDir
|
||
}
|
||
// kotlin 编译后的 class文件
|
||
from 'build/tmp/kotlin-classes/debug/'
|
||
// 指定需要被打包成 jar 的文件夹
|
||
// include('libs/**')
|
||
exclude '**/R.class'
|
||
exclude '**/R$*.class'
|
||
exclude "**/BuildConfig.class"
|
||
archiveBaseName = "${JAR_PREFIX}${project.name}-cache"
|
||
}
|
||
|
||
artifact androidLibraryJar
|
||
artifact androidSourcesJar
|
||
artifact androidJavadocsJar
|
||
|
||
} else if (project.plugins.hasPlugin('java')) {
|
||
def javaComponent = project.components.findByName('java')
|
||
if (javaComponent != null) {
|
||
from javaComponent
|
||
}
|
||
|
||
def sourcesJar = project.task("sourcesJar", type: Jar, dependsOn: 'classes') {
|
||
archiveClassifier = 'sources'
|
||
from project.sourceSets.main.allSource
|
||
}
|
||
|
||
def javadocsJar = project.task("javadocsJar", type: Jar, dependsOn: 'javadoc') {
|
||
archiveClassifier = 'javadoc'
|
||
from project.javadoc.destinationDir
|
||
}
|
||
|
||
artifact sourcesJar
|
||
artifact javadocsJar
|
||
}
|
||
|
||
pom {
|
||
name = project.PUBLISH_ARTIFACT_ID
|
||
description = rootProject.ext.desc
|
||
url = rootProject.ext.website
|
||
licenses {
|
||
license {
|
||
//协议类型,一般默认Apache License2.0的话不用改:
|
||
name = rootProject.ext.mavenCentralLicences
|
||
url = rootProject.ext.mavenCentralLicencesURL
|
||
}
|
||
}
|
||
developers {
|
||
developer {
|
||
id = rootProject.ext.mavenCentralUserID
|
||
name = rootProject.ext.mavenCentralUserName
|
||
email = rootProject.ext.mavenCentralEmail
|
||
}
|
||
}
|
||
scm {
|
||
//修改成你的Git地址:
|
||
connection = rootProject.ext.mavenCentralConnection
|
||
developerConnection = rootProject.ext.mavenCentralDeveloperConnection
|
||
//分支地址:
|
||
url = rootProject.ext.mavenCentralTreeURL
|
||
}
|
||
}
|
||
}
|
||
}
|
||
repositories {
|
||
maven {
|
||
name = "mavencentral"
|
||
|
||
def releasesRepoUrl = getReleaseRepositoryUrl()
|
||
def snapshotsRepoUrl = getSnapshotRepositoryUrl()
|
||
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
|
||
|
||
credentials {
|
||
username ossrhUsername
|
||
password ossrhPassword
|
||
}
|
||
}
|
||
}
|
||
}
|
||
signing {
|
||
required { !isLocal() && project.findProperty("signing.keyId") }
|
||
sign publishing.publications
|
||
}
|
||
}
|