프라이빗 Amazon S3 Maven 리포지토리에 Android 라이브러리 아티팩트 게시

5083 단어 androidgradleaws
Android 라이브러리를 게시하면 조직이나 커뮤니티에 여러 가지 이점이 있습니다. 이 게시물은 프라이빗 Amazon s3 버킷에 라이브러리 아티팩트를 게시하는 방법에 대한 비하인드 스토리입니다. 더 이상 고민하지 않고 바로 시작하겠습니다.

개요



이 게시물에서는 라이브러리 아티팩트를 amazon s3 버킷에 게시하는 데 중점을 둘 것이므로 전제 조건으로 이미 Android 라이브러리가 준비되어 있다고 가정합니다.

프라이빗 Amazon S3 Maven 리포지토리 설정



프라이빗 Amazon s3 버킷 설정부터 시작하겠습니다. amazon s3 console으로 이동하여 서비스 탭에서 s3를 선택합니다.



그런 다음 버킷 만들기를 선택하고 지침을 따릅니다. 버킷 이름은 고유해야 com.organization.library와 같은 라이브러리 패키지 이름과 같은 것을 사용할 수 있습니다.
이제 버킷이 준비되었으며 이를 사용하여 종속 항목을 제공할 수 있습니다.

아티팩트를 업로드하는 Gradle 스크립트


gradle/gradle-library-push.gradle 명령을 사용할 때 gradle-maven 플러그인을 사용하여 아티팩트를 s3 버킷에 푸시하는 데 사용할 ./gradlew publish라는 파일을 만듭니다.

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

// update these next lines to fit your specification
group = 'com.android.library'
version = '1.0'

// Add sources as an artifact
task sourceJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier "source"
}

// Loop over all variants
android.libraryVariants.all { variant ->
    variant.outputs.all { output ->
        // This creates a publication for each variant
        publishing.publications.create(variant.name, MavenPublication) {
            // The sources artifact from earlier
            artifact sourceJar

            // Variant dependent artifact, e.g. release, debug
            artifact source: output.outputFile, classifier: output.name

            // Go through all the dependencies for each variant and add them to the POM
            // file as dependencies
            pom.withXml {
                def dependencies = asNode().appendNode('dependencies')

                // Filter out anything that's not an external dependency. You shouldn't
                // be publishing artifacts that depend on local (e.g. project) dependencies,
                // but who knows...
                configurations.getByName(variant.name + "CompileClasspath").allDependencies
                        .findAll { it instanceof ExternalDependency }
                        .each {
                            def dependency = dependencies.appendNode('dependency')

                            dependency.appendNode('groupId', it.group)
                            dependency.appendNode('artifactId', it.name)
                            dependency.appendNode('version', it.version)
                        }
            }
        }
    }
}

// Ensure that the publish task depends on assembly
tasks.all { task ->
    if (task instanceof AbstractPublishToMaven) {
        task.dependsOn assemble
    }
}

// Configure the destination repository with
// S3 URL and access credentials
publishing {
    repositories {
        maven {
            //aws bucket link
            url "YOUR_S3_BUCKET_URL"
            //aws credentials
            credentials(AwsCredentials) {
                accessKey "YOUR_ACCESS_KEY"
                secretKey "YOUR_SECRET_KEY"
            }
        }
    }
}

// Top-level build file where you can add configuration
options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = '1.4.10'
    repositories {
        google()
        jcenter()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }
}


그런 다음 라이브러리의 build.gradle 파일에 포함합니다.apply from: rootProject.file('gradle/gradle-library-push.gradle')이제 Gradle 스크립트와 Amazon 버킷이 준비되었으므로 작업을 준비하겠습니다. 터미널에서 다음 명령을 실행합니다./gradlew library:publish.

프로젝트에서 새로운 종속성을 사용합니다.



루트 build.gradle 파일에 다음을 포함합니다.

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "YOUR_S3_BUCKET_URL"
            credentials(AwsCredentials) {
                accessKey "YOUR-ACCESS-KEY"
                secretKey "YOUR-SECRET-KEY"
            }
        }
    }
}


참조


  • https://github.com/codepath/android_guides/wiki/Building-your-own-Android-library#setting-up-a-private-amazon-s3-maven-repository
  • https://medium.com/@porten/publishing-android-library-artifacts-to-amazon-s3-buckets-8db4231e844f
  • 좋은 웹페이지 즐겨찾기