Publication de lib dans Maven Central

Préface



J'ai décidé de faire quelque chose d'utile. Il y avait un projet dans lequel nous devions en faire un nouveau, mais en meilleur que l'ancien service. Le service est excellent, 10k lignes de règles métier + 15k lignes de code Java. Maintenant, c'est deux fois plus. Mais comme il y a beaucoup de logique et que personne ne se souvient vraiment beaucoup (c'est pourquoi nous avons été appelés à faire des tests, des docks et un minimum de bugs), il a fallu comparer l'ancien service et le nouveau. Pour que nos testeurs ne meurent pas de vieillesse, en essayant de tout vérifier, j'ai pensé et écrit un service qui a extrait l'ancienne et la nouvelle API, comparé et fusionné la différence de réponses dans la base de données, afin que les testeurs vérifient et que nous corrigions la différence. Mais voici le problème, en entrée nous avons de nombreux paramètres et leurs valeurs possibles, ce sont des milliards de combinaisons, elles seront vérifiées pendant plusieurs mois à pleine charge, et il y en a beaucoup de similaires.

En conséquence, au début, l'idée est née de prendre et de réduire les changements possibles dans les paramètres et de rejeter généralement une partie de l'énumération, puis la théorie des tests par paires a été adoptée et elle a permis de jeter tous les paramètres et toutes les valeurs et de tout vérifier entièrement.







Cette théorie simple prétend que si nous créons des cas de test où chaque paire de paramètres se produit au moins une fois, alors nous couvrirons près de 90% des bogues. En même temps, vous pouvez tout choisir pour qu'il n'y ait pas des milliards de cas de test, mais peut-être plusieurs milliers. Excellent résultat! En conséquence, nous avons trouvé des centaines de divergences et même un tas de bogues dans l'ancien service, et avons fait réfléchir les rédacteurs de la logique métier à quelque chose auquel ils n'avaient jamais pensé auparavant, puisque nous leur avons juste lancé de nouveaux cas de test intéressants dans lesquels il n'était pas clair "comment droite".







Le code est écrit, tout fonctionne, tout le monde est content, mais d'une manière ou d'une autre, je ne voulais pas jeter le générateur de cas de test, alors je me suis assis le week-end et j'ai écrit une bibliothèque qui utilisait le même algorithme que dans le service de travail, mais qui était complètement arrachée à tout sauf lombok et a été écrite en dehors des heures de bureau. Par conséquent, j'ai voulu le publier sous la licence Apache 2.0 dans le maven central. Mais c'était si morne et mal décrit que j'ai décidé de me laisser un mémo sur Habré, pour que plus tard, si soudainement, je ne souffre pas une seconde fois.







Si vous en avez soudainement besoin, la libka est publiée ici .







Alors allons-y.







Inscrivez-vous sur sonatype.org



Publier directement sur Maven Central ne fonctionnera pas comme ça, j'ai donc utilisé le service intermédiaire sonatype.org. Tout d'abord, vous devez vous y inscrire.







Ils ont de la documentation sur la façon de tout publier .







, 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. Allez sur sonatype.org et fermez, libérez et déposez votre référentiel
  5. PROFIT !!!



All Articles