Publicar lib en maven central

Prefacio



Decidí hacer algo útil. Había un proyecto en el que teníamos que hacer uno nuevo, pero mejor, en lugar del antiguo servicio. El servicio es excelente, 10k líneas de reglas comerciales + 15k líneas de código Java. Ahora es el doble. Pero como hay mucha lógica y nadie recuerda mucho (por eso nos llamaron para tener pruebas, muelles y un mínimo de errores), era necesario comparar el servicio antiguo y el nuevo. Para que nuestros probadores no murieran de vejez, tratando de verificar todo, pensé y escribí un servicio que extrajo la API antigua y nueva, comparó y fusionó la diferencia en las respuestas en la base de datos, para que los probadores verificaran y arreglamos la diferencia. Pero aquí está el problema, en la entrada tenemos muchos parámetros y sus posibles valores, estos son miles de millones de combinaciones, se revisarán durante varios meses a plena carga, y hay muchos similares.

Como resultado, en un principio, nació la idea de tomar y reducir posibles cambios en los parámetros y, en general, descartar parte de la enumeración, y luego se adoptó la teoría de prueba por pares y permitió arrojar todos los parámetros y todos los valores y verificar todo por completo.







Esta teoría simple afirma que si creamos casos de prueba donde cada par de parámetros ocurre al menos una vez, entonces cubriremos casi el 90% de los errores. Al mismo tiempo, puede elegir todo para que no haya miles de millones de casos de prueba, sino quizás varios miles. ¡Excelente resultado! Como resultado, encontramos cientos de discrepancias e incluso un montón de errores en el servicio heredado, y también hicimos que los escritores de lógica empresarial pensaran en algo en lo que nunca habían pensado antes, ya que les presentamos nuevos casos de prueba interesantes en los que no estaba claro "cómo derecho".







El código está escrito, todo funciona, todos están contentos, pero de alguna manera no quería tirar el generador de casos de prueba, así que me senté el fin de semana y escribí una biblioteca que usaba el mismo algoritmo que en el servicio en funcionamiento, pero estaba completamente separado de todo excepto de lombok y estaba escrito fuera del horario de oficina. Por lo tanto, quería publicarlo bajo la licencia Apache 2.0 en maven central. Pero era tan triste y mal descrito que decidí dejarme una nota sobre Habré, para que más tarde, si de repente, no sufriera por segunda vez.







Si de repente lo necesita, la libka se publica aquí .







Entonces vamos.







Regístrese en sonatype.org



Publicar directamente en Maven Central no funcionará así, así que utilicé el servicio intermedio sonatype.org Primero, debes registrarte allí.







Tienen documentación sobre cómo publicar todo .







, 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. Vaya a sonatype.org y cierre, libere y suelte su repositorio
  5. LUCRO !!!



All Articles