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 } }