Đăng tải thư viện Java lên Kho Maven Trung tâm

Quá trình đăng tải một thư viện Java lên Maven Central Repository yêu cầu tuân thủ nghiêm ngặt các tiêu chuẩn về xác thực, mã hóa và siêu dữ liệu. Dưới đây là hướng dẫn thực tế, đã được tối ưu hóa và cập nhật theo quy trình hiện hành (sử dụng Sonatype Nexus Repository Manager v3 và OSSRH).

1. Thiết lập môi trường bắt buộc

  • Tạo tài khoản tại Sonatype Jira: Đăng ký bằng email doanh nghiệp hoặc tên miền cá nhân (Gmail không được khuyến khích cho dự án chính thức).
  • Tạo khóa GPG: Sử dụng lệnh sau để sinh cặp khóa mạnh (RSA 4096-bit):
    gpg --full-generate-key --expert
    # Chọn: (1) RSA and RSA, độ dài 4096, hết hạn sau 5 năm
    Sau đó xuất khóa công khai lên máy chủ:
    gpg --keyserver keyserver.ubuntu.com --send-keys <YOUR_KEY_ID>

2. Cấu hình Maven toàn cục (~/.m2/settings.xml)

Thêm phần <server> với ID khớp với profile trong pom.xml:

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>your-sonatype-username</username>
      <password>your-sonatype-password-or-api-token</password>
    </server>
  </servers>
</settings>

3. Cập nhật pom.xml với metadata bắt buộc

Đảm bảo các phần sau được khai báo đầy đủ — thiếu bất kỳ mục nào sẽ khiến quá trình kiểm duyệt bị từ chối:

  • <licenses>: Phải là giấy phép OSI-compliant (ví dụ: Apache-2.0, MIT)
  • <developers>: Tên và email rõ ràng, khớp với thông tin Jira
  • <scm>: URL Git hợp lệ, phải trùng với repository đã khai báo khi mở ticket trên Jira
  • <url> (trong <project>): Trang chủ dự án (ví dụ: GitHub Pages hoặc domain riêng)

4. Định nghĩa profile phát hành an toàn

Sử dụng plugin mới nhất và cấu hình đúng giai đoạn (phases) để đảm bảo tính tương thích với Nexus:

<profiles>
  <profile>
    <id>publish-to-central</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.3.0</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <goals><goal>jar</goal></goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.5.0</version>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals><goal>jar</goal></goals>
              <configuration>
                <doclint>none</doclint>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.1.0</version>
          <executions>
            <execution>
              <id>sign-artifacts</id>
              <phase>verify</phase>
              <goals><goal>sign</goal></goals>
              <configuration>
                <gpgArguments>
                  <arg>--pinentry-mode</arg>
                  <arg>loopback</arg>
                </gpgArguments>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>

    <distributionManagement>
      <snapshotRepository>
        <id>ossrh</id>
        <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
      </snapshotRepository>
      <repository>
        <id>ossrh</id>
        <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
      </repository>
    </distributionManagement>
  </profile>
</profiles>

5. Triển khai và xác minh

Chạy lệnh sau để xây dựng, ký và đẩy lên staging:

mvn clean deploy -P publish-to-central -Dgpg.passphrase="your-gpg-passphrase"

Sau khi hoàn tất, truy cập Nexus Repository Manager, đăng nhập và kiểm tra staging repository. Nếu mọi thứ đạt yêu cầu, chọn CloseRelease. Thư viện sẽ có mặt trong Maven Central sau khoảng 10–30 phút.

Thẻ: maven-central sonatype nexus gpg maven-deploy

Đăng vào ngày 22 tháng 6 lúc 20:15