[Dev] ขั้นตอนการ Publish Android Library ไปที่ Maven Central

จากบทความตอนที่แล้วในเรื่อง ขั้นตอนการ Publish Android Library ไปที่ jCenter ซึ่งเราจะต้อง Publish Library ไปยัง Bintray ก่อน แล้วถึงจะทำการ Link ไปยัง jCenter ได้นั้น นอกจากนี้ เรายังสามารถที่จะ Sync ไปยัง Maven Central ได้ด้วย

Android-Developer-logo_Publish-Library-to-Maven-Central

ซึ่งการ Sync ไปยัง Maven Central นั้น ต่างจากการนำขึ้นไป Maven Central เอง ถ้าพร้อมแล้ว มาดูกันต่อนะครับ

ถ้าใครยังไม่ได้อ่านบทความตอนแรก ไปอ่านก่อนนะ เพราะบทความนี้เป็นตอนต่อนะ ไม่งั้นเดี๋ยวจะงง

 

List of contents

 

Create Sonatype Issue

ก่อนจะนำ Library ขึ้นไปยัง Maven Central ได้นั้น เราจะต้องสมัคร Account ที่เว็บ Sonatype ก่อน แล้ว Login ให้เรียบร้อย หลังจากนั้นก็ทำการ Create Issue ใหม่ขึ้นมา แล้วกรอกแบบฟอร์มลงไป…

Create Issue บน Sonatype
Create Issue บน Sonatype

โดยจุดสำคัญอยู่ที่ Summary (1), Group Id (2), Project URL (3) และ SCM url (4) ซึ่ง Group Id นั้น ทาง Sonatype ค่อนข้างเข้มงวดในเรื่องของการตั้งชื่อ ซึ่งในตอนแรก ผมใช้ com.ethanf ซึ่งใช้ได้บน jCenter แต่ทาง Sonatype กลับไม่ยอมให้ผ่าน เลยจำเป็นต้องเปลี่ยนเป็น com.artit-k เพื่อให้ถูกต้องตามเงื่อนไข

สำหรับในช่อง Already Synced to Central (5) ให้กำหนดเป็น None ไปก่อน แล้วกดปุ่ม Create (6)

หลังจากนั้น รอทีมงานของ Sonatype มาตรวจ (อาจใช้เวลา 1-2 วัน) ถ้าผ่านเรียบร้อยดี เค้าจะตอบกลับมาเป็นข้อความแบบนี้ ซึ่งจะแนะนำว่าเราต้องทำอะไรเป็นขั้นตอนต่อไป

สำหรับ Issue ที่ผมใช้ Group Id ที่ไม่ถูกต้อง ทำยังไงทีมงานก็ไม่ยอมให้ผ่าน สามารถกดเข้าไปดูได้ที่นี่

คำแนะนำจากทีมงาน Sonatype สำหรับขั้นตอนต่อไป
คำแนะนำจากทีมงาน Sonatype สำหรับขั้นตอนต่อไป

แต่เราจะไม่ได้ทำขั้นตอนเหล่านี้หรอกนะ เพราะเราจะ Sync จาก Bintray ไปแทน (ง่ายกว่าเยอะ)

และไม่จำเป็นต้องรอผลการตรวจนะ ทำขั้นตอนต่อไปก่อนได้เลย

 

GPG Signing

สำหรับ Library ที่จะขึ้นไปยัง Maven Central ได้นั้น จำเป็นจะต้องทำการ Sign ด้วย ซึ่งการ Sign นั้น Bintray จะทำให้อัตโนมัติ เพียงแต่เราต้องเป็นคนสร้าง Key ขึ้นมา แล้วนำ Public Key ไปใส่ไว้ใน Bintray

การจะสร้าง Key บน Windows นั้น เราจะใช้โปรแกรม Gpg4win ให้ Download มา และติดตั้งให้เรียบร้อย หลังจากนั้นก็เปิด Command Prompt (cmd) หรือ DOS ขึ้นมา พิมพ์คำสั่งเพื่อสร้าง Key ดังนี้

ระบบก็จะถามเราเป็นข้อ ๆ ตามที่ผมเน้นบรรทัดไว้ โดยส่วนสำคัญอยู่ที่ประเภท Key, ชื่อ, Email และ Passphrase

Passphrase เปรียบเสมือน Password ของ Key ที่เราสร้างเนี่ยแหล่ะ อย่าลืมจำไว้ด้วยนะ

หลังจากป้อน Passphrase แล้ว ระบบจะทำการสร้าง Key ซึ่งจะมีข้อความแนะนำว่าให้เรา กดปุ่มบน Keyboard ขยับ Mouse หรือทำอะไรก็ได้ที่ทำให้มีการใช้งาน Disk เพื่อจะได้สร้าง Key ได้ดีกว่า…

เมื่อสร้าง Key เรียบร้อยแล้ว พิมพ์คำสั่งดังนี้ เพื่อตรวจสอบดู Key ของเรา ว่าสร้างแล้ว

ก็จะเห็นประมาณนี้

แล้วทำการ Publish ไปยัง Key Server ด้วยคำสั่งดังนี้ (ไม่จำเป็นต้องทำก็ได้)

ตรง XXXXXXXX ให้เปลี่ยนเป็นค่าตาม Key ของเรา ที่ได้จากการสั่ง List Keys นะ

แล้วสั่งคำสั่งต่อไปนี้ เพื่อทำการดูในส่วนของ Public Key

ก็จะเห็นประมาณนี้

นำ Public Key ที่ได้มา ไปฝากไว้ที่ Bintray โดยเข้าไปที่ Edit Profile ที่เมนู GPG Signing (1) จะมีช่องให้ใส่ Public Key (2) แล้วเซฟให้เรียบร้อย

Bintray GPG Signing
Bintray GPG Signing

 

Update Gradle Script

ต่อไป เราจะต้องแก้ไข Gradle Script ซึ่งจากบทความตอนที่แล้วนั้น ก็คือการแก้ไขในส่วนของไฟล์ bintray.gradle ตามนี้

ในส่วนของ gpg จะเกี่ยวกับการ Sign Library ของเรา โดยให้กำหนดค่า sign เป็น true เพื่อให้ Bintray นำ Key ที่เราฝากไว้ ทำการ Sign ให้เราเมื่อเรา Publish ขึ้นไป โดยจะต้องกำหนด passphrase ในบรรทัดที่ 47 ด้วย ซึ่งใน Script ข้างบน จะไปอ่านค่า Passphrase จากตัวแปร bintray.gpg.password ในไฟล์ local.properties (เดี๋ยวจะพูดถึงอีกที)

และในส่วนของ mavenCentralSync จะใช้บอก Bintray ว่าจะให้ Sync ไปยัง Maven Central เลยหรือไม่ ถ้าจะให้ Sync เลยก็ให้กำหนดค่า sync เป็น true โดยจะต้องกำหนด user (token), password (token) และ close ด้วย ในตัวอย่างด้านบน ผมจะยังไม่ sync ก่อน แต่เดี๋ยวจะไป sync บนเว็บ Bintray แทน

ซึ่งค่า user และ password ควรที่จะเป็นความลับ ใน Script ข้างบน จึงกำหนดให้ไปอ่านค่าจากไฟล์ local.properties เช่นเดียวกับ Passphrase

สำหรับไฟล์ local.properties ก็เพิ่มตัวแปรทั้ง 3 ลงไป พร้อมกำหนดค่า ดังนี้

โดยค่า bintray.oss.user และ bintray.oss.password นั้น ให้ Login เข้าไปยัง Sonatype OSS แล้วคลิกที่ User เรา เลือก Profile (1) > เลือก User Token (2) แล้วคลิกปุ่ม Access User Token (3) ระบบจะให้ใส่ Password ของเราเพื่อยืนยันอีกครั้ง

User Token บน OSS Sonatype
User Token บน OSS Sonatype

ก็จะได้ Token มาแล้ว เอาไปใส่ local.properties ได้เลย

User Token บน OSS Sonatype
User Token บน OSS Sonatype

 

Sync Bintray to Maven Central

จากหัวข้อที่แล้ว ถ้าเรากำหนด mavenCentralSync ให้ทำการ Sync เลย ก็จบแค่นี้ เปิด Android Studio ขึ้นมา Sync Gradle แล้ว Build Project ตามด้วย Publish to Bintray ก็เสร็จแล้วล่ะ

แต่… จากตัวอย่างด้านบน ผมยังไม่ให้ Sync เพราะฉะนั้น เมื่อ Publish to Bintray แล้ว เราจะต้องเข้าไป Sync บน Bintray ด้วยตัวเอง

แต่ก่อนจะ Sync ลองเข้าไปที่เมนู Files ก่อน จะเห็นว่าไฟล์ที่เรา Publish ขึ้นมานั้น จะมีไฟล์ .asc เพิ่มขึ้นมาด้วย ซึ่งได้จากการที่ Bintray ทำการ Sign ให้เรา ด้วย Key ที่เราฝากไว้ หลังจาก Publish ขึ้นมาแล้วนั่นเอง

ข้อมูล Library ในแถบ Files ของ Bintray
ข้อมูล Library ในแถบ Files ของ Bintray

ตอนนี้ก็พร้อมที่จะ Sync ไปยัง Maven Central แล้วล่ะ ก็เข้าไปที่เมนู Maven Central แล้ว นำ Token ที่ได้จากหัวข้อที่แล้ว มาใส่ (1), (2) แล้วทำการ Sync (3) ได้เลย

แถบ Maven Central ของ Bintray
แถบ Maven Central ของ Bintray

รอสักครู่ ถ้าเรียบร้อยดี จะเห็นในส่วนของ Sync Status ดังนี้ จะเห็นว่า Sync และ Close เรียบร้อย

Sync Status ในแถบ Maven Central ของ Bintray
Sync Status ในแถบ Maven Central ของ Bintray

หลังจากนั้น ให้ตรวจสอบที่ Staging Repositories บน Sonatype OSS ดูอันล่าสุดในตาราง จะเห็นว่า Repository ของเรานั้น มี Status เป็น Released แล้ว

Staging Repositories บน OSS Sonatype
Staging Repositories บน OSS Sonatype

ยังไม่จบ…

เราจำเป็นต้องกลับไปที่ Sonatype Issue ที่สร้างไว้ในขั้นตอนแรก แล้วไปโพสบอกเค้าด้วย ว่าเรา Release เรียบร้อยแล้ว หลังจากนั้นก็รอทีมงานมา Activate ให้ โดยจะแจ้งให้ทราบว่า จะ Publish ไปอยู่บน Central ภายใน 10 นาที และสามารถใช้ Maven Central search ค้นหาเจอ หลังจากนี้อีกประมาณ 2 ชั่วโมง

ลอง Search บน Android Studio ดู ก็เจอแล้วล่ะ

Choose Library Dependency dialog บน Android Studio
Choose Library Dependency dialog บน Android Studio

 

Summary

สรุปกันซะหน่อย เป็นขั้นตอนแบบย่อ ๆ เพื่อที่จะนำ Library ของเรา ไปโลดแล่นอยู่บน jCenter และ Maven Central ก็คือ…

  1. Publish to Bintray
  2. Add to jCenter
  3. Sync to Maven Central

สำหรับการนำ Android Library ขึ้นไปที่ Maven Central ก็จบเพียงเท่านี้…

 

แต่ก่อนจบ… พอดีระหว่างเขียนบทความ ไปเจอ Blog ของคนไทย ที่เขียนเรื่องเดียวกันไว้มากมายหลายสูตร เลยเอามาแปะไว้ด้วย เผื่อว่าผู้อ่านท่านไหน ชอบสูตรไหนมากกว่า ก็เลือกเอาตามใจชอบได้เลยครับ

บทความแนะนำ

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.