Menerbitkan lib di maven central

Kata pengantar



Saya memutuskan untuk melakukan sesuatu yang bermanfaat. Ada proyek di mana kami harus membuat yang baru, tetapi lebih baik daripada layanan lama. Layanannya hebat, 10k baris aturan bisnis + 15k baris kode Java. Sekarang jumlahnya dua kali lipat. Tetapi karena ada banyak logika dan tidak ada yang benar-benar mengingat banyak (itulah sebabnya kami dipanggil untuk melakukan tes, dok, dan minimal bug), perlu membandingkan layanan lama dan yang baru. Agar penguji kami tidak mati karena usia tua, mencoba memeriksa semuanya, saya berpikir dan menulis layanan yang menarik api lama dan baru, membandingkan dan menggabungkan perbedaan jawaban ke dalam database, sehingga penguji akan memeriksa dan kami akan memperbaiki perbedaannya. Tapi inilah masalahnya, pada input kita memiliki banyak parameter dan kemungkinan nilainya, ini adalah miliaran kombinasi, mereka akan diperiksa selama beberapa bulan dengan muatan penuh, dan ada banyak yang serupa.

Akibatnya, pada awalnya, ide lahir untuk mengambil dan mengurangi kemungkinan perubahan parameter dan umumnya membuang beberapa enumerasi, dan kemudian teori pengujian berpasangan diadopsi dan memungkinkan membuang semua parameter dan semua nilai dan memeriksa semuanya sepenuhnya.







Teori sederhana ini mengklaim bahwa jika kita membuat kasus uji di mana setiap pasang parameter terjadi setidaknya sekali, maka kita akan menutupi hampir 90% bug. Pada saat yang sama, Anda dapat memilih semuanya sehingga tidak akan ada miliaran kasus uji, tetapi mungkin beberapa ribu. Hasil luar biasa! Akibatnya, kami menemukan ratusan ketidaksesuaian dan bahkan sekumpulan bug dalam layanan lama, serta membuat para penulis logika bisnis berpikir tentang apa yang tidak pernah mereka pikirkan sebelumnya, karena kami baru saja melemparkan kepada mereka kasus uji baru yang menarik di mana tidak jelas "bagaimana Baik".







Kode tertulis, semuanya bekerja, semua orang senang, tetapi entah bagaimana saya tidak ingin membuang generator kasus uji, jadi saya duduk di akhir pekan dan menulis lib yang menggunakan algoritma yang sama seperti dalam layanan kerja, tetapi benar-benar dicabut dari semuanya kecuali lombok dan ditulis di luar jam kantor. Oleh karena itu, saya ingin mempublikasikannya di bawah lisensi Apache 2.0 di pusat maven. Tapi itu begitu suram dan buruk dijelaskan sehingga saya memutuskan untuk meninggalkan diri saya memo tentang Habré, sehingga nanti, jika tiba-tiba, saya tidak akan menderita untuk kedua kalinya.







Jika Anda tiba-tiba membutuhkannya, libka diterbitkan di sini .







Jadi ayo pergi.







Daftar di sonatype.org



Menerbitkan langsung ke Maven Central tidak akan berfungsi begitu saja, jadi saya menggunakan layanan perantara sonatype.org Pertama, Anda perlu mendaftar di sana.







Mereka memiliki dokumentasi tentang cara merilis semuanya .







, pom.xml









: gnupg, maven release plugin . , git , . . . .







GNUpg



. , , . , . , GUI , . gpa , .







:







  1. .

    Imgur
  2. Ctrl+N.
  3. .
  4. , sonatype.org , . "" " ".

    Imgur

    .


settings.xml



Maven. sonatype.org ( ), .







<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <servers>
    <server>
      <id>ossrh</id>
      <username>3DRaven</username>
      <password>passwordForYourAccountInSonata</password>
    </server>
  </servers>
  <mirrors/>
  <proxies/>
  <profiles>
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg2</gpg.executable>
        <gpg.passphrase>passwordForGPGKey</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  <activeProfiles/>
</settings>
      
      





ossrh .







pom.xml



, javadoc, source. . ,













<description>Generate array of minimal size of pairwise tests cover all pairs of changing params</description>
    <url>https://github.com/3DRaven/pairwiser</url>
    <inceptionYear>2020</inceptionYear>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>3DRaven</id>
            <name>Renat Eskenin</name>
            <email>email</email>
        </developer>
    </developers>
    <scm>
        <connection>scm:git:ssh://git@github.com:3DRaven/pairwiser.git</connection>
        <developerConnection>scm:git:ssh://git@github.com:3DRaven/pairwiser.git</developerConnection>
        <tag>HEAD</tag>
        <url>https://github.com/3DRaven/pairwiser</url>
    </scm>

    <issueManagement>
        <system>GitHub</system>
        <url>https://github.com/3DRaven/pairwiser/issues</url>
    </issueManagement>
    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
      
      





distributionManagement. , , id ossrh settings.xml . , javadoc source. profiles , . .







<profiles>
        <!-- GPG Signature on release -->
        <profile>
            <id>release-sign-artifacts</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${maven.gpg.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>${maven.source.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${maven.javadoc.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
      
      





sonatype.org, staging . . Open . , "", . sonatype.org .







<plugin>
    <groupId>org.sonatype.plugins</groupId>
    <artifactId>nexus-staging-maven-plugin</artifactId>
    <version>${nexus.staging.maven.plugin.version}</version>
    <extensions>true</extensions>
    <configuration>
        <serverId>ossrh</serverId>
        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
    </configuration>
</plugin>
      
      







sonatype.org , , . Jira .







staging



, , , , sonatype.org







mvn release:clean release:prepare 
mvn release:perform
      
      





, , , "Close".









, , , . , Maven Central . ( ) . "", Close. , Release Drop. . , , Maven Central







!









  1. sonatype.org
  2. settings.xml
  3. pom.xml
  4. Buka sonatype.org dan tutup, lepaskan dan jatuhkan repositori Anda
  5. KEUNTUNGAN !!!



All Articles