Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди Gradle рд░ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдпрд╕ рд▓реЗрдЦрдорд╛, рдо Gradle рдмрд┐рд▓реНрдбрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдорд╛рд░реНрдлрдд рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдЬрд╛рднрд╛ рдХрд▓рд╛рдХреГрддрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред

рдПрдХреИ рдард╛рдЙрдБрдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдХреЛ рдХрдореАрдХреЛ рдХрд╛рд░рдг рдореИрд▓реЗ рдпреЛ рд▓реЗрдЦ рд▓реЗрдЦреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реАрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддрд╣рд░реВрдмрд╛рдЯ рдЯреБрдХреНрд░рд╛ рдЯреБрдХреНрд░рд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБрдкрд░реНрдереНрдпреЛ, рдпрд╕рдмрд╛рд╣реЗрдХ, рдкреВрд░реНрдг рд░реВрдкрдорд╛ рддрд╛рдЬрд╛ рдЫреИрдиред рдХрд╕рд▓рд╛рдИ рдЦреНрдпрд╛рд▓ рдЫ, рдмрд┐рд░рд╛рд▓реЛ рдЕрдиреНрддрд░реНрдЧрдд рд╕реНрд╡рд╛рдЧрдд рдЫред

Sonatype рдорд╛ рдПрдХ рднрдгреНрдбрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

рдкрд╣рд┐рд▓реЛ рдЪрд░рдг рд╕реЛрдирд╛рдЯрд╛рдЗрдк рдорд╛рднреЗрди рд╕реЗрдиреНрдЯреНрд░рд▓рдорд╛ рднрдгреНрдбрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд╛рдиреНрдЫреМрдВ рдпрд╣рд╛рдБ, рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╣рд╛рдореАрд▓рд╛рдИ рднрдгреНрдбрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реЛрдзреНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдорд╛ рдбреНрд░рд╛рдЗрдн рдЧрд░реНрдЫреМрдВ рд╕рдореВрд╣рдЖрдИрдбреА рдкрд░рд┐рдпреЛрдЬрдирд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпреВрдЖрд░рдПрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рд┐рдЩреНрдХ рд░ SCM url рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд▓рд┐рдЩреНрдХ рдЬрд╕рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рд╕рдореВрд╣рдЖрдИрдбреА рдпрд╣рд╛рдБ рдлрд╛рд░рдо com.example, com.example.domain, com.example.testsupport рд╣реБрдиреБрдкрд░реНрдЫ, рд░ рддрдкрд╛рдИрдВрдХреЛ github рдХреЛ рд▓рд┐рдЩреНрдХрдХреЛ рд░реВрдкрдорд╛ рдкрдирд┐ рд╣реБрди рд╕рдХреНрдЫ: github.com/yourusername -> io.github.yourusernameред рдХреБрдиреИ рдкрдирд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдбреЛрдореЗрди рд╡рд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рдХреЛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ github рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЗрдЪреНрдЫрд┐рдд рдирд╛рдордХреЛ рд╕рд╛рде рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрдгреНрдбрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реЛрдзрд┐рдиреЗрдЫред

рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдкрдЫрд┐ рдХреЗрд╣рд┐ рд╕рдордп рдкрдЫрд┐, рддрдкрд╛рдЗрдБрдХреЛ GroupId рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫ рд░ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЪрд░рдг, Gradle рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдЬрд╛рди рд╕рдХреНрдЫреМрдВред

Gradle рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

рд▓реЗрдЦреНрдиреЗ рд╕рдордпрдорд╛, рдореИрд▓реЗ рдХрд▓рд╛рдХреГрддрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрдиреЗ Gradle рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдиред рдпреЛ рдореИрд▓реЗ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдХреЛ рдПрдХ рдорд╛рддреНрд░ рдкреНрд▓рдЧрдЗрди, рддрдерд╛рдкрд┐, рд▓реЗрдЦрдХрд▓реЗ рдпрд╕рд▓рд╛рдИ рдердк рд╕рдорд░реНрдерди рдЧрд░реНрди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реЗред рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ рд╕рдмреИ рдХреБрд░рд╛ рдЖрдлреИрдВ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ, рдХрд┐рдирдХрд┐ рдпреЛ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫреИрдиред

рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ рдкрд╣рд┐рд▓реЛ рдХреБрд░рд╛ рднрдиреЗрдХреЛ рдкреНрд░рдХрд╛рд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдирд╛рдЯрд╛рдЗрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рд╣реЛред рддрд┐рдиреАрд╣рд░реВ рдирд┐рдореНрди рд╣реБрдиреН:

  • рд╕реНрд░реЛрдд рдХреЛрдб рд░ JavaDoc рдХреЛ рдЙрдкрд▓рдмреНрдзрддрд╛, рдЕрд░реНрдерд╛рддреНред рдЙрдкрд╕реНрдерд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ -sources.jar ╨╕-javadoc.jar рдлрд╛рдЗрд▓рд╣рд░реВред рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрди рд╕рдореНрднрд╡ рдЫреИрди рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдбрдореА рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред -sources.jar рд╡рд╛ -javadoc.jar рдПрдХ рд╕рд╛рдзрд╛рд░рдг README рднрд┐рддреНрд░ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреАред
  • рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реБрдиреБрдкрд░реНрдЫ GPG/PGPрд░ .asc рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рднрдПрдХреЛ рдлрд╛рдЗрд▓ рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреБрдкрд░реНрдЫред
  • рдЙрдкрд▓рдмреНрдзрддрд╛ pom рдлрд╛рдЗрд▓
  • рд╕рд╣реА рдорд╛рдирд╣рд░реВ groupId, artifactId ╨╕ versionред рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдЩ рд╣реБрди рд╕рдХреНрдЫ рд░ рдпрд╕рдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрди рд╕рдХреНрджреИрди -SNAPSHOT
  • рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ name, description ╨╕ url
  • рдЗрдЬрд╛рдЬрддрдкрддреНрд░, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐

рдпреА рдЖрдзрд╛рд░рднреВрдд рдирд┐рдпрдорд╣рд░реВ рд╣реБрдиреН рдЬреБрди рдкреНрд░рдХрд╛рд╢рди рдЧрд░реНрджрд╛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рдЫ рдпрд╣рд╛рдБ.

рд╣рд╛рдореА рдпреА рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫреМрдВ build.gradle рдлрд╛рдЗрд▓ред рдкрд╣рд┐рд▓реЗ, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ, рдЗрдЬрд╛рдЬрддрдкрддреНрд░рд╣рд░реВ, рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдердкреМрдВ, рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ url, рдирд╛рдо рд░ рд╡рд┐рд╡рд░рдг рдкрдирд┐ рд╕реЗрдЯ рдЧрд░реМрдВред рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рд▓реЗрдЦреМрдВ:

def customizePom(pom) {
    pom.withXml {
        def root = asNode()

        root.dependencies.removeAll { dep ->
            dep.scope == "test"
        }

        root.children().last() + {
            resolveStrategy = DELEGATE_FIRST

            description 'Some description of artifact'
            name 'Artifct name'
            url 'https://github.com/login/projectname'
            organization {
                name 'com.github.login'
                url 'https://github.com/login'
            }
            issueManagement {
                system 'GitHub'
                url 'https://github.com/login/projectname/issues'
            }
            licenses {
                license {
                    name 'The Apache License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
            scm {
                url 'https://github.com/login/projectname'
                connection 'scm:https://github.com/login/projectname.git'
                developerConnection 'scm:git://github.com/login/projectname.git'
            }
            developers {
                developer {
                    id 'dev'
                    name 'DevName'
                    email '[email protected]'
                }
            }
        }
    }
}

рдЕрд░реНрдХреЛ, рддрдкрд╛рдИрдВрд▓реЗ рдЙрддреНрдкрдиреНрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕рдордпрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ -sources.jar ╨╕-javadoc.jar рдлрд╛рдЗрд▓рд╣рд░реВред рдпрд╕ рдЦрдгреНрдбрдХреЛ рд▓рд╛рдЧрд┐ java рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

java {
    withJavadocJar()
    withSourcesJar()
}

GPG/PGP рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ рдЕрдиреНрддрд┐рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдорд╛ рдЬрд╛рдФрдВред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд▓рдЧрдЗрди рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН signing:

plugins {
    id 'signing'
}

рд░ рдПрдЙрдЯрд╛ рдЦрдгреНрдб рдердкреНрдиреБрд╣реЛрд╕реН:

signing {
    sign publishing.publications
}

рдЕрдиреНрддрдорд╛, рдПрдЙрдЯрд╛ рдЦрдгреНрдб рдердкреМрдВ publishing:

publishing {
    publications {
        mavenJava(MavenPublication) {
            customizePom(pom)
            groupId group
            artifactId archivesBaseName
            version version

            from components.java
        }
    }
    repositories {
        maven {
            url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
            credentials {
                username sonatypeUsername
                password sonatypePassword
            }
        }
    }
}

рдпреЛ рдЫ sonatypeрдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо ╨╕ sonatypePassword рджрд░реНрддрд╛рдХреЛ рдХреНрд░рдордорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд▓рдЧрдЗрди рд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдорд╛рд╡реЗрд╢ рдЪрд░ sonatype.org.

рдпрд╕рд░реА рдлрд╛рдЗрдирд▓ build.gradle рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫ:

рдкреВрд░реНрдг build.gradle рдХреЛрдб

plugins {
    id 'java'
    id 'maven-publish'
    id 'signing'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    withJavadocJar()
    withSourcesJar()
}

group 'io.github.githublogin'
archivesBaseName = 'projectname'
version = System.getenv('RELEASE_VERSION') ?: "0.0.1"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}

test {
    useJUnitPlatform()
}

jar {
    from sourceSets.main.output
    from sourceSets.main.allJava
}

signing {
    sign publishing.publications
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            customizePom(pom)
            groupId group
            artifactId archivesBaseName
            version version

            from components.java
        }
    }
    repositories {
        maven {
            url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
            credentials {
                username sonatypeUsername
                password sonatypePassword
            }
        }
    }
}

def customizePom(pom) {
    pom.withXml {
        def root = asNode()

        root.dependencies.removeAll { dep ->
            dep.scope == "test"
        }

        root.children().last() + {
            resolveStrategy = DELEGATE_FIRST

            description 'Some description of artifact'
            name 'Artifct name'
            url 'https://github.com/login/projectname'
            organization {
                name 'com.github.login'
                url 'https://github.com/githublogin'
            }
            issueManagement {
                system 'GitHub'
                url 'https://github.com/githublogin/projectname/issues'
            }
            licenses {
                license {
                    name 'The Apache License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
            scm {
                url 'https://github.com/githublogin/projectname'
                connection 'scm:https://github.com/githublogin/projectname.git'
                developerConnection 'scm:git://github.com/githublogin/projectname.git'
            }
            developers {
                developer {
                    id 'dev'
                    name 'DevName'
                    email '[email protected]'
                }
            }
        }
    }
}

рдо рдиреЛрдЯ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рд╣рд╛рдореАрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рдмрд╛рдЯ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ: System.getenv('RELEASE_VERSION')ред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рднрд╛рдХреЛ рд╕рдордпрдорд╛ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдЯреНрдпрд╛рдЧ рдирд╛рдордмрд╛рдЯ рд▓рд┐рдиреЗрдЫреМрдВред

PGP рдХреБрдЮреНрдЬреА рдкреБрд╕реНрддрд╛

Sonatype рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рднрдиреЗрдХреЛ рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВ GPG/PGP рдХреБрдЮреНрдЬреАрджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реБрдиреБрдкрд░реНрдЫред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд╛рдиреНрдЫреМрдВ рдпрд╣рд╛рдБ рд░ рдЖрдлреНрдиреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ рд▓рд╛рдЧрд┐ GnuPG рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред

  • рд╣рд╛рдореА рдХреБрдЮреНрдЬреА рдЬреЛрдбрд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдЫреМрдВ: gpg --gen-key, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдЗ-рдореЗрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкрдирд┐ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  • рд╣рд╛рдореА рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрдЫреМрдВ id рдЖрджреЗрд╢ рд╕рдВрдЧ рд╣рд╛рдореНрд░реЛ рдХреБрдЮреНрдЬреА: gpg --list-secret-keys --keyid-format shortред рдЖрдИрдбреА рд╕реНрд▓реНрдпрд╛рд╢ рдкрдЫрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдиреЗрдЫ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА: rsa2048/9B695056
  • рд╕рд░реНрднрд░рдорд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрджреИ https://keys.openpgp.org рдЖрджреЗрд╢: gpg --keyserver [https://keys.openpgp.org](https://keys.openpgp.org/) --send-keys 9B695056
  • рд╣рд╛рдореА рдЧреЛрдкреНрдп рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдордирдорд╛рдиреА рдард╛рдЙрдБрдорд╛ рдирд┐рд░реНрдпрд╛рдд рдЧрд░реНрдЫреМрдВ, рд╣рд╛рдореАрд▓рд╛рдИ рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдиреЗрдЫ: gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg

Github рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдЕрдиреНрддрд┐рдо рдЪрд░рдгрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН, Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░реНрдорд╛рдг рд░ рд╕реНрд╡рдд: рдкреНрд░рдХрд╛рд╢рди рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реНред
Github рдХрд╛рд░реНрдпрд╣рд░реВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреВрд░реНрдг CI / CD рдЪрдХреНрд░ рд▓рд╛рдЧреВ рдЧрд░реЗрд░ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдирд┐рд░реНрдорд╛рдг, рдкрд░реАрдХреНрд╖рдг, рд░ рддреИрдирд╛рддреА рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ: рдХреЛрдб рдкреБрд╢, рд░рд┐рд▓реАрдЬ рд╕рд┐рд░реНрдЬрдирд╛, рд╡рд╛ рдореБрджреНрджрд╛рд╣рд░реВред рдпреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрдгреНрдбрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рдГрд╢реБрд▓реНрдХ рдЫред

рдпрд╕ рдЦрдгреНрдбрдорд╛, рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХрд╕рд░реА рдмрд┐рд▓реНрдб рд░ рдкреБрд╢ рдХреЛрдб рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рд░ рд░рд┐рд▓реАрдЬрдорд╛ рд╕реЛрдирд╛рдЯрд╛рдЗрдк рднрдгреНрдбрд╛рд░рдорд╛ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреЗ, рд╕рд╛рдереИ рдЧреЛрдкреНрдпрд╣рд░реВ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред

рд╣рд╛рдореАрд▓реЗ рдЧреЛрдкреНрдп рд░рд╛рдЦреНрдпреМрдВ

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕реЗрдореНрдмреНрд▓реА рд░ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рдЧреЛрдкреНрдп рдорд╛рдирд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬрд╕реНрддреИ рдХрд┐ рдХреБрдЮреНрдЬреА рдЖрдИрдбреА, рдХреБрдЮреНрдЬреА рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрдХреЛ рдкрд╛рд╕рд╡рд░реНрдб, PGP рдХреБрдЮреНрдЬреА рдЖрдлреИрдВ, рд░ Sonatype рд▓рдЧрдЗрди/рдкрд╛рд╕рд╡рд░реНрдбред рддрдкрд╛рдЗрдБ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рднрдгреНрдбрд╛рд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рд╡рд┐рд╢реЗрд╖ рдЦрдгреНрдбрдорд╛ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди Gradle рд░ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рд╣рд╛рдореАрд▓реЗ рдирд┐рдореНрди рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрдЫреМрдВ:

  • SONATYPE_USERNAME / SONATYPE_PASSWORD - рд▓рдЧрдЗрди / рдкрд╛рд╕рд╡рд░реНрдб рдЬреБрди рд╣рд╛рдореАрд▓реЗ Sonatype рдорд╛ рджрд░реНрддрд╛ рдЧрд░реНрджрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВ
  • SIGNING_KEYID/SIGNING_PASSWORD тАФ PGP рдХреБрдЮреНрдЬреА рдЖрдИрдбреА рд░ рдкрд╛рд╕рд╡рд░реНрдб рдЬреЗрдиреЗрд░реЗрд╢рдирдХреЛ рд╕рдордпрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдпреЛред

рдо рдердк рд╡рд┐рд╡рд░рдгрдорд╛ GPG_KEY_CONTENTS рдЪрд░рдорд╛ рдмрд╕реНрди рдЪрд╛рд╣рдиреНрдЫреБред рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдкреНрд░рдХрд╛рд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдирд┐рдЬреА PGP рдХреБрдЮреНрдЬреА рдЪрд╛рд╣рд┐рдиреНрдЫред рдЧреЛрдкреНрдп рдорд╛ рдкреЛрд╕реНрдЯ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, рдореИрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ рдирд┐рд░реНрджреЗрд╢рди рд░ рд╕рд╛рдереИ рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реЗред

  • Gpg рдХреЛ рд╕рд╛рде рд╣рд╛рдореНрд░реЛ рдХреБрдЮреНрдЬреА рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░реМрдВ: gpg --symmetric --cipher-algo AES256 9B695056.gpgрдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрд░ред рдпрд╕рд▓рд╛рдИ рдЪрд▓рдорд╛ рд░рд╛рдЦреНрдиреБрдкрд░реНрдЫ: SECRET_PASSPHRASE
  • рдкреНрд░рд╛рдкреНрдд рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдЖрдзрд╛рд░ 64 рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд╛рда рдлрд╛рд░рдордорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реМрдВ: base64 9B695056.gpg.gpg > 9B695056.txtред рд╕рд╛рдордЧреНрд░реА рдЪрд░рдорд╛ рд░рд╛рдЦрд┐рдиреЗрдЫ: GPG_KEY_CONTENTSред

рдХреЛрдб рдкреБрд╢ рдЧрд░реНрджрд╛ рд░ PR рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рд╕реЗрдЯрдЕрдк рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдореВрд▓рдорд╛ рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ: .github/workflows.

рдпрд╕рдорд╛, рдлрд╛рдЗрд▓ рдорд╛рд░реНрдХрдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, gradle-ci-build.yml рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧ:

name: build

on:
  push:
    branches:
      - master
      - dev
      - testing
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 8
        uses: actions/setup-java@v1
        with:
          java-version: 8

      - name: Build with Gradle
        uses: eskatos/gradle-command-action@v1
        with:
          gradle-version: current
          arguments: build -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}

рдпреЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╢рд╛рдЦрд╛рд╣рд░реВрдорд╛ рдкреБрд╢ рдЧрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫ master, dev ╨╕ testing, рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рдкрдирд┐ред

рд░реЛрдЬрдЧрд╛рд░ рдЦрдгреНрдбрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдирд╛рд╣рд░реВрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЪрд░рдгрд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА ubuntu рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗрдЫреМрдВ, Java 8 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ Gradle рдХреЛ рд▓рд╛рдЧреА рдкреНрд▓рдЧрдЗрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред eskatos/gradle-command-action@v1рдЬрд╕рд▓реЗ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗрдЫ argumentsред рдЪрд░рд╣рд░реВ secrets.SONATYPE_USERNAME ╨╕ secrets.SONATYPE_PASSWORD рдпреА рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕реЛрдзреЗрдХрд╛ рд░рд╣рд╕реНрдпрд╣рд░реВ рд╣реБрдиреНред

рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдХрд╛рд░реНрдп рдЯреНрдпрд╛рдмрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рд╣реБрдиреЗрдЫрдиреН:

Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди Gradle рд░ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдирдпрд╛рдБ рд░рд┐рд▓реАрдЬ рд░рд┐рд▓реАрдЬ рд╣реБрдБрджрд╛ рд╕реНрд╡рдд: рдбрд┐рдкреНрд▓реЛрдЗ

Autodeploy рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ gradle-ci-publish.yml:

name: publish

on:
  push:
    tags:
      - 'v*'

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 8
        uses: actions/setup-java@v1
        with:
          java-version: 8

      - name: Prepare to publish
        run: |
          echo '${{secrets.GPG_KEY_CONTENTS}}' | base64 -d > publish_key.gpg
          gpg --quiet --batch --yes --decrypt --passphrase="${{secrets.SECRET_PASSPHRASE}}" 
          --output secret.gpg publish_key.gpg
          echo "::set-env name=RELEASE_VERSION::${GITHUB_REF:11}"

      - name: Publish with Gradle
        uses: eskatos/gradle-command-action@v1
        with:
          gradle-version: current
          arguments: test publish -Psigning.secretKeyRingFile=secret.gpg -Psigning.keyId=${{secrets.SIGNING_KEYID}} -Psigning.password=${{secrets.SIGNING_PASSWORD}} -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}

рдлрд╛рдЗрд▓ рдкрд╣рд┐рд▓реЗрдХреЛ рдЬрд╕реНрддреИ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдЫ, рдШрдЯрдирд╛ рдмрд╛рд╣реЗрдХ рдЬреБрди рдпреЛ рдЯреНрд░рд┐рдЧрд░ рд╣реБрдиреЗрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпреЛ v рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреЗ рдирд╛рдордХреЛ рд╕рд╛рде рдЯреНрдпрд╛рдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдШрдЯрдирд╛ рд╣реЛред

рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореАрд▓реЗ рдЧреЛрдкреНрдпрдмрд╛рдЯ PGP рдХреБрдЮреНрдЬреА рдирд┐рдХрд╛рд▓реНрдиреБ рдкрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЛ рд░реВрдЯрдорд╛ рд░рд╛рдЦреНрдиреБ рдкрд░реНрдЫ, рд╕рд╛рдереИ рдпрд╕рд▓рд╛рдИ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдЕрд░реНрдХреЛ, рд╣рд╛рдореАрд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ RELEASE_VERSION рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрдЫреМрдВ gradle.build рдлрд╛рдЗрд▓ред рдпреЛ рд╕рдмреИ рдЦрдгреНрдб рдорд╛ рдЧрд░рд┐рдиреНрдЫ Prepare to publishред рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреБрдЮреНрдЬреА GPG_KEY_CONTENTS рдЪрд░рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓рд╛рдИ gpg рдлрд╛рдЗрд▓рдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддреНрдпрд╕рдкрдЫрд┐ рдлрд╛рдЗрд▓рдорд╛ рд░рд╛рдЦреЗрд░ рдпрд╕рд▓рд╛рдИ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред secret.gpg.

рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рдорд╛ рдЬрд╛рдиреНрдЫреМрдВ GITHUB_REF, рдЬрд╕рдмрд╛рдЯ рд╣рд╛рдореАрд▓реЗ рдЯреНрдпрд╛рдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рд╕реЗрдЯ рдЧрд░реЗрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдЪрд░ рдпрд╕ рдорд╛рдорд▓рд╛ рдорд╛ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫред refs/tags/v0.0.2 рдЬрд╕рдмрд╛рдЯ рд╣рд╛рдореАрд▓реЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкрд╣рд┐рд▓реЛ 11 рд╡рд░реНрдгрд╣рд░реВ рдХрд╛рдЯреНрдпреМрдВред рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдкреНрд░рдХрд╛рд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирдХ Gradle рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ: test publish

Sonatype рднрдгреНрдбрд╛рд░рдорд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

рд░рд┐рд▓реАрдЬ рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдкрдЫрд┐, рдЕрдШрд┐рд▓реНрд▓реЛ рдЦрдгреНрдбрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕реБрд░реБ рд╣реБрдиреБрдкрд░реНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд░рд┐рд▓реАрдЬ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди Gradle рд░ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдЯреНрдпрд╛рдЧ рдирд╛рдо v рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреБрдкрд░реНрдЫред рдпрджрд┐, рдкреНрд░рдХрд╛рд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреНрд▓рд┐рдХ рдЧрд░реЗрдкрдЫрд┐, рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рднрдпреЛ, рд╣рд╛рдореА рдЬрд╛рди рд╕рдХреНрдЫреМрдВ Sonatype Nexus рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди:

Sonatype Maven рдХреЗрдиреНрджреНрд░реАрдп рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди Gradle рд░ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдХрд▓рд╛рдХреГрддрд┐ рд╕реНрдЯреЗрдЬрд┐рдЩ рднрдгреНрдбрд╛рд░рдорд╛ рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛред рдпреЛ рддреБрд░реБрдиреНрддреИ рдЦреБрд▓рд╛ рд╕реНрдерд┐рддрд┐рдорд╛ рджреЗрдЦрд╛ рдкрд░реНрджрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдЙрдкрдпреБрдХреНрдд рдмрдЯрди рдерд┐рдЪреЗрд░ рдмрдиреНрдж рд╕реНрдерд┐рддрд┐рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫред рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рднрдПрдХреЛ рдЬрд╛рдБрдЪ рдЧрд░реЗрдкрдЫрд┐, рдХрд▓рд╛рдХреГрддрд┐ рдмрдиреНрдж рд╕реНрдерд┐рддрд┐рдорд╛ рдЬрд╛рдиреНрдЫ рд░ рдЕрдм рдкрд░рд┐рдорд╛рд░реНрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдЫреИрдиред рдпрд╕ рдлрд╛рд░рдордорд╛, рдпреЛ MavenCentral рдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫред рдпрджрд┐ рд╕рдмреИ рдареАрдХ рдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдмрдЯрди рдерд┐рдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╛рд░реА, рд░ рдХрд▓рд╛рдХреГрддрд┐ рд╕реЛрдирд╛рдЯрд╛рдЗрдк рднрдгреНрдбрд╛рд░рдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫред

рдХрд▓рд╛рдХреГрддрд┐ MavenCentral рдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, рддрдкрд╛рдИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ рдХрд╛рд░реНрдпрдорд╛ рд╕реЛрдзреНрдиреБ рдкрд░реНрдЫред рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫреМрдВред рдкрдЫрд┐рд▓реНрд▓реЛ рд╕рдордпрдорд╛, рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рд╕рдмреИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬ рд╣реБрдиреЗрдЫред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рддреБрд░реБрдиреНрддреИ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд╕рдХреНрд░рд┐рдп рдЧрд░реЗ, рддрд░ рдХрд▓рд╛рдХреГрддрд┐ MavenCentral рдорд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрди рд▓рдЧрднрдЧ 5 рджрд┐рди рд▓рд╛рдЧреНрдпреЛред

рдпрддрд┐ рдорд╛рддреНрд░реИ рд╣реЛ, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХрд▓рд╛рдХреГрддрд┐ MavenCentral рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдЩреНрдХрд╣рд░реВ

  • рд╕рдорд╛рди рд▓реЗрдЦ, maven рдорд╛рд░реНрдлрдд рдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд
  • рд╕реНрдерд┐рд░рддрд╛ рднрдгреНрдбрд╛рд░ рд╕реЛрдирд╛рдЯрд╛рдЗрдк
  • Jira рд╕реЛрдирд╛рдЯрд╛рдЗрдк рдЬрд╕рдорд╛ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди
  • рдЙрджрд╛рд╣рд░рдг: рднрдгреНрдбрд╛рд░ рдЬрд╣рд╛рдБ рдпреЛ рд╕рдмреИ рд╕реЗрдЯ рдЕрдк рдЫ

рд╕реНрд░реЛрдд: www.habr.com