use maven-publish plugin (#31611)

Summary:
Gradle has been showing below warning for a while, and this PR fixes the warning using maven-publish plugin, thus taking us one step closer to Gradle 7.x.

> The maven plugin has been deprecated. This is scheduled to be removed in Gradle 7.0. Please use the maven-publish plugin instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.9/userguide/upgrading_version_5.html#legacy_publication_system_is_deprecated_and_replaced_with_the_publish_plugins

Configured maven-publish plugin according to https://developer.android.com/studio/build/maven-publish-plugin, also added **installArchives** task for backwards compatibility.

## Changelog

[Internal] [Changed] - use maven-publish plugin to build and publish Android artifact

Pull Request resolved: https://github.com/facebook/react-native/pull/31611

Test Plan: ./gradlew :ReactAndroid:installArchives will create **android** directory for local maven repository with **react-native** package.

Reviewed By: yungsters

Differential Revision: D28802435

Pulled By: ShikaSD

fbshipit-source-id: 7bc7650a700e1a61213c5ec238bcb24fdca954db
This commit is contained in:
Dulmandakh
2021-06-03 14:29:07 -07:00
committed by Facebook GitHub Bot
parent 47b0be5f55
commit fc6fc637bb
2 changed files with 56 additions and 90 deletions
+56 -3
View File
@@ -8,7 +8,7 @@
plugins {
id("com.android.library")
id("com.facebook.react.codegen")
id("maven")
id("maven-publish")
id("de.undercouch.download")
}
@@ -18,6 +18,7 @@ import de.undercouch.gradle.tasks.download.Download
import org.apache.tools.ant.taskdefs.condition.Os
import org.apache.tools.ant.filters.ReplaceTokens
def AAR_OUTPUT_URL = "file://${projectDir}/../android"
// We download various C++ open-source dependencies into downloads.
// We then copy both the downloaded code and our custom makefiles and headers into third-party-ndk.
// After that we build native code from src/main/jni with module path pointing at third-party-ndk.
@@ -425,6 +426,10 @@ task extractJNIFiles {
}
}
task installArchives {
dependsOn("publishReleasePublicationToNpmRepository")
}
android {
compileSdkVersion 30
ndkVersion ANDROID_NDK_VERSION
@@ -516,8 +521,6 @@ dependencies {
androidTestImplementation("org.mockito:mockito-core:${MOCKITO_CORE_VERSION}")
}
apply(from: "release.gradle")
react {
// TODO: The library name is chosen for parity with Fabric components & iOS
// This should be changed to a more generic name, e.g. `ReactCoreSpec`.
@@ -526,3 +529,53 @@ react {
reactNativeRootDir = file("$projectDir/..")
useJavaGenerator = System.getenv("USE_CODEGEN_JAVAPOET") ?: false
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
// Applies the component for the release build variant.
from components.release
// You can then customize attributes of the publication as shown below.
artifactId = POM_ARTIFACT_ID
groupId = GROUP
version = VERSION_NAME
pom {
name = POM_NAME
description = "A framework for building native apps with React"
url = "https://github.com/facebook/react-native"
developers {
developer {
id = "facebook"
name = "Facebook"
}
}
licenses {
license {
name = "MIT License"
url = "https://github.com/facebook/react-native/blob/master/LICENSE"
distribution = "repo"
}
}
scm {
url = "https://github.com/facebook/react-native.git"
connection = "scm:git:https://github.com/facebook/react-native.git"
developerConnection = "scm:git:git@github.com:facebook/react-native.git"
}
}
}
}
repositories {
maven {
name = "npm"
url = AAR_OUTPUT_URL
}
}
}
}
-87
View File
@@ -1,87 +0,0 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
apply(plugin: "maven")
apply(plugin: "signing")
ext {
AAR_OUTPUT_URL = "file://${projectDir}/../android"
}
// Gradle tasks for publishing to maven
// 1) To install in local maven repo use :installArchives task
// 2) To upload artifact to maven central use: :uploadArchives (you'd need to have the permission to do that)
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def configureReactNativePom(def pom) {
pom.project {
name(POM_NAME)
artifactId(POM_ARTIFACT_ID)
packaging(POM_PACKAGING)
description("A framework for building native apps with React")
url("https://github.com/facebook/react-native")
scm {
url("https://github.com/facebook/react-native.git")
connection("scm:git:https://github.com/facebook/react-native.git")
developerConnection("scm:git:git@github.com:facebook/react-native.git")
}
licenses {
license {
name("MIT License")
url("https://github.com/facebook/react-native/blob/master/LICENSE")
distribution("repo")
}
}
developers {
developer {
id("facebook")
name("Facebook")
}
}
}
}
if (JavaVersion.current().isJava8Compatible()) {
allprojects {
tasks.withType(Javadoc) {
options.addStringOption("Xdoclint:none", "-quiet")
}
}
}
afterEvaluate { project ->
android.libraryVariants.all { variant ->
def name = variant.name.capitalize()
task "jar${name}"(type: Jar, dependsOn: variant.javaCompileProvider.get()) {
from(variant.javaCompileProvider.get().destinationDir)
}
}
version = VERSION_NAME
group = GROUP
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign(configurations.archives)
}
task installArchives(type: Upload) {
configuration = configurations.archives
repositories.mavenDeployer {
// Deploy to react-native/android, ready to publish to npm
repository(url: AAR_OUTPUT_URL)
configureReactNativePom(pom)
}
}
}