เจเจธ เจฒเฉเจ เจตเจฟเจ, เจฎเฉเจ เจเฉเจฐเฉเจกเจฒ เจฌเจฟเจฒเจกเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจธเฉเจจเจพเจเจพเจเจช เจฎเจพเจตเฉเจจ เจธเฉเจเจเจฐเจฒ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเฉเฉฐ เจเจฟเจฅเจฌ เจเจเจธเจผเจจ เจฆเฉเจเจฐเจพ เจธเจเฉเจฐเฉเจ เจคเฉเจ เจเจพเจตเจพ เจเจฐเจเฉเจซเฉเจเจ เจจเฉเฉฐ เจชเฉเจฐเจเจพเจธเจผเจค เจเจฐเจจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ 'เจคเฉ เจกเฉเฉฐเจเจพเจ เจจเจพเจฒ เจตเจฟเจเจพเจฐ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ.
เจฎเฉเจ เจเจน เจฒเฉเจ เจเจ เจฅเจพเจ 'เจคเฉ เจเจฎ เจเจฟเจเจเฉเจฐเจฟเจ เจฒ เจฆเฉ เจเจพเจ เจเจพเจฐเจจ เจฒเจฟเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉเฅค เจธเจพเจฐเฉ เจเจพเจฃเจเจพเจฐเฉ เจตเฉฑเจ-เจตเฉฑเจ เจธเจฐเฉเจคเจพเจ เจคเฉเจ เจเฉเจเฉเฉ-เจเฉเจเฉเฉ เจเจเฉฑเจ เฉ เจเฉเจคเฉ เจเจพเจฃเฉ เจธเฉ, เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจคเจพเจเจผเจพ เจจเจนเฉเจเฅค เจเฉเจฃ เจชเจฐเจตเจพเจน เจเจฐเจฆเจพ เจนเฉ, เจฌเจฟเฉฑเจฒเฉ เจฆเฉ เจนเฉเจ เจพเจ เจธเฉเจเจเจค เจนเฉเฅค
เจธเฉเจจเจพเจเจพเจเจช เจตเจฟเฉฑเจ เจเฉฑเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฌเจฃเจพเจเจฃเจพ
เจชเจนเจฟเจฒเจพ เจเจฆเจฎ เจธเฉเจจเจพเจเจพเจเจช เจฎเจพเจตเฉเจจ เจธเฉเจเจเจฐเจฒ เจตเจฟเฉฑเจ เจเฉฑเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฌเจฃเจพเจเจฃเจพ เจนเฉเฅค เจเจธ เจฒเจ เจ
เจธเฉเจ เจเจพเจเจฆเฉ เจนเจพเจ
เจชเฉเจธเจผเจเฉ เจนเฉเจฃ เจคเฉเจ เจเฉเจ เจธเจฎเฉเจ เจฌเจพเจ เจฆ, เจคเฉเจนเจพเจกเฉ เจเจฐเฉเฉฑเจชเจเจเจกเฉ เจฌเจฃเจพเจ เจเจพเจตเฉเจเฉ เจ เจคเฉ เจ เจธเฉเจ เจ เจเจฒเฉ เจชเฉเจพเจ , เจเฉเจฐเฉเจกเจฒ เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ 'เจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจพเจเฅค
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 เจชเจพเจธเจตเจฐเจก 'เจคเฉ เจฐเจเจฟเจธเจเจฐเฉเจธเจผเจจ เจฆเฉเจฐเจพเจจ เจฌเจฃเจพเจ เจเจ เจฒเฉเจเจเจจ เจ
เจคเฉ เจชเจพเจธเจตเจฐเจก เจตเจพเจฒเฉ เจตเฉเจฐเฉเจเจฌเจฒ
เจเจธ เจคเจฐเฉเจนเจพเจ เจซเจพเจเจจเจฒ 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 เจเฉเฉฐเจเฉ เจจเจพเจฒ เจธเจพเจเจจ เจเฉเจคเจพ เจเจพเจตเฉเฅค เจเจธ เจฒเจ เจ
เจธเฉเจ เจเจพเจเจฆเฉ เจนเจพเจ
- เจ
เจธเฉเจ เจเฉฑเจ เจเฉเฉฐเจเฉ เจเฉเฉเจพ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจนเจพเจ:
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