เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจœเจพเจตเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ—เฉเจฐเฉ‡เจกเจฒ เจ…เจคเฉ‡ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš, เจฎเฉˆเจ‚ เจ—เฉเจฐเฉ‡เจกเจฒ เจฌเจฟเจฒเจกเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจธเจ•เฉเจฐเฉˆเจš เจคเฉ‹เจ‚ เจœเจพเจตเจพ เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจค เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† 'เจคเฉ‡ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจตเจฟเจšเจพเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚.

เจฎเฉˆเจ‚ เจ‡เจน เจฒเฉ‡เจ– เจ‡เจ• เจฅเจพเจ‚ 'เจคเฉ‡ เจ†เจฎ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ เจฆเฉ€ เจ˜เจพเจŸ เจ•เจพเจฐเจจ เจฒเจฟเจ–เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆเฅค เจธเจพเจฐเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเฉ‹เจคเจพเจ‚ เจคเฉ‹เจ‚ เจŸเฉเจ•เฉœเฉ‡-เจŸเฉเจ•เฉœเฉ‡ เจ‡เจ•เฉฑเจ เฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเฉ€ เจธเฉ€, เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจคเจพเจœเจผเจพ เจจเจนเฉ€เจ‚เฅค เจ•เฉŒเจฃ เจชเจฐเจตเจพเจน เจ•เจฐเจฆเจพ เจนเฉˆ, เจฌเจฟเฉฑเจฒเฉ€ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจธเฉเจ†เจ—เจค เจนเฉˆเฅค

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ

เจชเจนเจฟเจฒเจพ เจ•เจฆเจฎ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ‡เฉฑเจฅเฉ‡, เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจ•เฉฐเจฎ เจฌเจฃเจพเจ“, เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจนเฉ‹เฅค เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจตเจฟเฉฑเจš เจ—เฉฑเจกเฉ€ เจ—เจฐเฉเฉฑเจช เจ†เจˆ.เจกเฉ€ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ URL เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจฟเฉฐเจ• เจ…เจคเฉ‡ SCM url เจตเจฐเจœเจจ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจธเจฟเจธเจŸเจฎ เจฒเจˆ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจœเจฟเจธ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเจฅเจฟเจค เจนเฉˆเฅค เจ—เจฐเฉเฉฑเจช เจ†เจˆ.เจกเฉ€ เจ‡เฉฑเจฅเฉ‡ com.example, com.example.domain, com.example.testsupport เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจคเฉเจนเจพเจกเฉ‡ github เจฆเฉ‡ เจฒเจฟเฉฐเจ• เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเฉ€ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ: github.com/yourusername -> io.github.yourusernameเฅค เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจกเฉ‹เจฎเฉ‡เจจ เจœเจพเจ‚ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฆเฉ€ เจฎเจฒเจ•เฉ€เจ…เจค เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ—เจฟเจฅเจฌ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจจเจพเจฎ เจจเจพเจฒ เจ‡เฉฑเจ• เจœเจจเจคเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจฟเจนเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจชเฉเจธเจผเจŸเฉ€ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจ•เฉเจ เจธเจฎเฉ‡เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจนเจพเจกเฉ€ เจ—เจฐเฉเฉฑเจชเจ†เจˆเจกเฉ€ เจฌเจฃเจพเจˆ เจœเจพเจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ…เจ—เจฒเฉ‡ เจชเฉœเจพเจ…, เจ—เฉเจฐเฉ‡เจกเจฒ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ 'เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค

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

เจ†เจ‰ เจœเฉ€เจชเฉ€เจœเฉ€/เจชเฉ€เจœเฉ€เจชเฉ€ เจฆเจธเจคเจ–เจค เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, เจ†เจ–เจฐเฉ€ เจฒเฉ‹เฉœ เจตเฉฑเจฒ เจตเจงเฉ€เจเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจชเจฒเฉฑเจ—เจ‡เจจ เจจเจพเจฒ เจœเฉเฉœเฉ‹ 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เจ‰เจชเจฏเฉ‹เจ—เจ•เจฐเจคเจพ เจจเจพเจฎ ะธ sonatype เจชเจพเจธเจตเจฐเจก 'เจคเฉ‡ เจฐเจœเจฟเจธเจŸเจฐเฉ‡เจธเจผเจจ เจฆเฉŒเจฐเจพเจจ เจฌเจฃเจพเจ เจ—เจ เจฒเฉŒเจ—เจ‡เจจ เจ…เจคเฉ‡ เจชเจพเจธเจตเจฐเจก เจตเจพเจฒเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 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 เจ•เฉเฉฐเจœเฉ€ เจชเฉ€เฉœเฉเจนเฉ€

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฆเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจ‡เจน เจนเฉˆ เจ•เจฟ เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• 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

เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจธเฉˆเจŸ เจ…เจช เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจ†เจ‰ เจ…เฉฐเจคเจฎ เจชเฉœเจพเจ… 'เจคเฉ‡ เจšเฉฑเจฒเฉ€เจ, เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเจฟเจฒเจก เจ…เจคเฉ‡ เจ†เจŸเฉ‹-เจชเจฌเจฒเจฟเจธเจผ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเฉ€เจเฅค
เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ‡ CI / CD เจšเฉฑเจ•เจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจ•เฉ‡ เจตเจฐเจ•เจซเจฒเฉ‹ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฌเจฟเจฒเจก, เจŸเฉˆเจธเจŸ, เจ…เจคเฉ‡ เจกเจฟเจชเจฒเจพเจ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจ‡เจตเฉˆเจ‚เจŸเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ: เจ•เฉ‹เจก เจชเฉเจธเจผ, เจฐเฉ€เจฒเฉ€เจœเจผ เจฐเจšเจจเจพ, เจœเจพเจ‚ เจฎเฉเฉฑเจฆเฉ‡เฅค เจ‡เจน เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจœเจจเจคเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฒเจˆ เจฌเจฟเจฒเจ•เฉเจฒ เจฎเฉเจซเจค เจนเฉˆเฅค

เจ‡เจธ เจญเจพเจ— เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจตเจพเจ‚เจ—เจพ เจ•เจฟ เจฌเจฟเจฒเจก เจ…เจคเฉ‡ เจชเฉเจธเจผ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฐเฉ€เจฒเฉ€เจœเจผ เจนเฉ‹เจฃ 'เจคเฉ‡ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจคเฉˆเจจเจพเจค เจ•เจฐเจจเจพ เจนเฉˆ, เจจเจพเจฒ เจนเฉ€ เจญเฉ‡เจฆ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจฐเจพเจœเจผ เจธเฉˆเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจ…เจคเฉ‡ เจกเจฟเจชเจฒเจพเจ‡เจฎเฉˆเจ‚เจŸ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจ•เจˆ เจ—เฉเจชเจค เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เฉเฉฐเจœเฉ€ เจ†เจˆ.เจกเฉ€., เจชเจพเจธเจตเจฐเจก เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ•เฉเฉฐเจœเฉ€ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจฆเจฐเจœ เจ•เฉ€เจคเจพ เจธเฉ€, PGP เจ•เฉเฉฐเจœเฉ€ เจ–เฉเจฆ, เจ…เจคเฉ‡ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฒเฉŒเจ—เจ‡เจจ/เจชเจพเจธเจตเจฐเจกเฅค เจคเฉเจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจญเจพเจ— เจตเจฟเฉฑเจš เจธเฉˆเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจœเจพเจตเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ—เฉเจฐเฉ‡เจกเจฒ เจ…เจคเฉ‡ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

  • SONATYPE_USERNAME / SONATYPE_PASSWORD - เจฒเฉŒเจ—เจ‡เจจ / เจชเจพเจธเจตเจฐเจก เจœเฉ‹ เจ…เจธเฉ€เจ‚ Sonatype เจจเจพเจฒ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจฆเจฐเจœ เจ•เฉ€เจคเจพ เจธเฉ€
  • SIGNING_KEYID/SIGNING_PASSWORD โ€” เจชเฉ€เจœเฉ€เจชเฉ€ เจ•เฉเฉฐเจœเฉ€ เจ†เจˆเจกเฉ€ เจ…เจคเฉ‡ เจชเจพเจธเจตเจฐเจก เจชเฉ€เฉœเฉเจนเฉ€ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจฎเฉˆเจ‚ GPG_KEY_CONTENTS เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 'เจคเฉ‡ เจนเฉ‹เจฐ เจตเจฟเจธเจคเจพเจฐ เจจเจพเจฒ เจฐเจนเจฟเจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚เฅค เจคเฉฑเจฅ เจ‡เจน เจนเฉˆ เจ•เจฟ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉเจฐเจพเจˆเจตเฉ‡เจŸ PGP เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจญเฉ‡เจฆ เจตเจฟเฉฑเจš เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉ‹เจธเจŸ เจ•เจฐเจจ เจฒเจˆ, เจฎเฉˆเจ‚ เจตเจฐเจคเจฟเจ† เจนเจฆเจพเจ‡เจค เจ…เจคเฉ‡ เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจ•เจˆ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚เฅค

  • เจ†เจ‰ เจœเฉ€เจชเฉ€เจœเฉ€ เจจเจพเจฒ เจธเจพเจกเฉ€ เจ•เฉเฉฐเจœเฉ€ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเฉ€เจ: 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, เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจตเฉ€เฅค

เจจเฉŒเจ•เจฐเฉ€เจ†เจ‚ เจฆเจพ เจธเฉˆเจ•เจธเจผเจจ เจจเจฟเจธเจผเจšเจฟเจค เจ‡เจตเฉˆเจ‚เจŸเจพเจ‚ 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจ•เจฆเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‰เจฌเฉฐเจŸเฉ‚ เจฆเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจธเฉฐเจธเจ•เจฐเจฃ 'เจคเฉ‡ เจจเจฟเจฐเจฎเจพเจฃ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเจพเจตเจพ 8 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ…เจคเฉ‡ เจ—เฉเจฐเฉ‡เจกเจฒ เจฒเจˆ เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡. eskatos/gradle-command-action@v1เจœเฉ‹, เจฌเจฟเจฒเจกเจฐ เจฆเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจตเจฟเฉฑเจš เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจเจ—เจพ arguments. เจตเฉ‡เจฐเฉ€เจเจฌเจฒ secrets.SONATYPE_USERNAME ะธ secrets.SONATYPE_PASSWORD เจ‡เจน เจ‰เจน เจญเฉ‡เจฆ เจนเจจ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจชเฉเฉฑเจ›เฉ‡ เจธเจจเฅค

เจฌเจฟเจฒเจก เจจเจคเฉ€เจœเฉ‡ เจเจ•เจธเจผเจจ เจŸเฉˆเจฌ เจตเจฟเฉฑเจš เจชเฉเจฐเจคเฉ€เจฌเจฟเฉฐเจฌเจค เจนเฉ‹เจฃเจ—เฉ‡:

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจœเจพเจตเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ—เฉเจฐเฉ‡เจกเจฒ เจ…เจคเฉ‡ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจฐเฉ€เจฒเฉ€เจœเจผ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจคเจพเจ‚ เจธเจตเฉˆ-เจคเฉˆเจจเจพเจค เจ•เจฐเฉ‹

เจ†เจŸเฉ‹เจกเจฟเจชเจฒเจพเจ‡ เจฒเจˆ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจตเจฐเจ•เจซเจฒเฉ‹ เจซเจพเจˆเจฒ เจฌเจฃเจพเจˆเจ 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 เจ…เฉฑเจ–เจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉฑเจŸ เจฆเจฟเฉฑเจคเจพ เจนเฉˆเฅค เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจฎเจฟเจ†เจฐเฉ€ เจ—เฉเจฐเฉ‡เจกเจฒ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚: test publish

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจคเฉ€ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจฐเฉ€เจฒเฉ€เจœเจผ เจฌเจฃเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจชเจฟเจ›เจฒเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจตเจฐเจ•เจซเจฒเฉ‹ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฐเฉ€เจฒเฉ€เจœเจผ เจฌเจฃเจพเจ“:

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจœเจพเจตเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ—เฉเจฐเฉ‡เจกเจฒ เจ…เจคเฉ‡ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจŸเฉˆเจ— เจฆเจพ เจจเจพเจฎ v เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ. เจœเฉ‡เจ•เจฐ, เจชเจฌเจฒเจฟเจธเจผ เจฐเฉ€เจฒเฉ€เจœเจผ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจตเจฐเจ•เจซเจฒเฉ‹ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจชเฉ‚เจฐเจพ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจธเฉ‹เจจเจŸเจพเจˆเจช เจ—เจ เจœเฉ‹เฉœ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ:

เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฎเจพเจตเฉ‡เจจ เจธเฉˆเจ‚เจŸเจฐเจฒ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจœเจพเจตเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ—เฉเจฐเฉ‡เจกเจฒ เจ…เจคเฉ‡ เจ—เจฟเจฅเจฌ เจเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจธเจŸเฉ‡เจœเจฟเฉฐเจ— เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเจ—เจŸ เจนเฉ‹เจ‡เจ†เฅค เจ‡เจน เจคเฉเจฐเฉฐเจค เจ“เจชเจจ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเจ—เจŸ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจขเฉเจ•เจตเฉ‡เจ‚ เจฌเจŸเจจ เจจเฉ‚เฉฐ เจฆเจฌเจพ เจ•เฉ‡ เจนเฉฑเจฅเฉ€เจ‚ เจฌเฉฐเจฆ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจœเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ•เจฟ เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเจพเจ‚ เจชเฉ‚เจฐเฉ€เจ†เจ‚ เจนเฉ‹ เจ—เจˆเจ†เจ‚ เจนเจจ, เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจฌเฉฐเจฆ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจšเจฒเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉเจฃ เจธเฉ‹เจง เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจธ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ‡เจน MavenCentral เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ. เจœเฉ‡ เจธเจญ เจ เฉ€เจ• เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเจŸเจจ เจฆเจฌเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจฐเฉ€เจฒเจฟเจœเจผ, เจ…เจคเฉ‡ เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจจเฉ‚เฉฐ MavenCentral เจตเจฟเฉฑเจš เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจธ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ€ เจฎเฉฐเจ— เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจฌเจฃเจพเจ‡เจ† เจธเฉ€เฅค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจตเจพเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจฌเจพเจ…เจฆ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš, เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจธเจญ เจ•เฉเจ เจ†เจชเจฃเฉ‡ เจ†เจช เจนเฉ€ เจธเจฎเจ•เจพเจฒเฉ€ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‰เจนเจจเจพเจ‚ เจจเฉ‡ เจฎเฉ‡เจฐเฉ‡ เจฒเจˆ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจšเจพเจฒเฉ‚ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ, เจชเจฐ เจ•เจฒเจพเจคเจฎเจ• เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ MavenCentral เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉ‹เจฃ เจตเจฟเฉฑเจš เจฒเจ—เจญเจ— 5 เจฆเจฟเจจ เจฒเฉฑเจ— เจ—เจเฅค

เจ‡เจน เจธเจญ เจนเฉˆ, เจ…เจธเฉ€เจ‚ MavenCentral เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ€ เจ•เจฒเจพเจ•เฉเจฐเจฟเจคเฉ€ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เฉ€เจคเฉ€ เจนเฉˆ.

เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจฒเจฟเฉฐเจ•

  • เจธเจฎเจพเจจ เจฒเฉ‡เจ–, เจธเจฟเจฐเจซเจผ maven เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเฉ‹
  • เจธเจŸเฉ‡เจœเจฟเฉฐเจ— เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจธเฉ‹เจจเจพเจŸเจพเจˆเจช
  • Jira เจธเฉ‹เจจเจพเจŸเจพเจˆเจช เจœเจฟเจธ เจตเจฟเฉฑเจš เจŸเจพเจธเจ• เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ
  • เจ‰เจฆเจพเจนเจฐเจจ: เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจธเจญ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจนเฉˆ

เจธเจฐเฉ‹เจค: www.habr.com