Publicação de lib em maven central

Prefácio



Decidi fazer algo útil. Teve um projeto em que tivemos que fazer um novo, mas melhor que o antigo. O serviço é ótimo, 10 mil linhas de regras de negócios + 15 mil linhas de código Java. Agora é o dobro. Mas como há muita lógica e ninguém se lembra muito (por isso fomos chamados para fazer testes, docks e um mínimo de bugs), foi necessário comparar o serviço antigo com o novo. Para que nossos testadores não morressem de velhice, tentando verificar tudo, pensei e escrevi um serviço que puxava a API antiga e a nova, comparava e mesclava a diferença de respostas no banco de dados, para que os testadores verificassem e consertássemos a diferença. Mas aqui está o problema, na entrada temos muitos parâmetros e seus valores possíveis, são bilhões de combinações, eles serão verificados por vários meses com carga total, e existem muitos outros semelhantes.

Como resultado, a princípio nasceu a ideia de pegar e reduzir possíveis mudanças nos parâmetros e geralmente descartar parte da enumeração, e então a teoria do teste Pairwise foi adotada e permitiu lançar todos os parâmetros e todos os valores e verificar tudo por completo.







Essa teoria simples afirma que, se criarmos casos de teste onde cada par de parâmetros ocorre pelo menos uma vez, cobriremos quase 90% dos bugs. Ao mesmo tempo, você pode escolher tudo para que não haja bilhões de casos de teste, mas talvez vários milhares. Excelente resultado! Como resultado, encontramos centenas de discrepâncias e até mesmo um monte de bugs no serviço legado, bem como fizemos os criadores da lógica de negócios pensarem em algo que nunca haviam pensado antes, já que apenas lançamos para eles novos casos de teste interessantes nos quais não estava claro "como direito".







O código está escrito, tudo funciona, todos estão felizes, mas de alguma forma eu não queria descartar o gerador de casos de teste, então sentei no fim de semana e escrevi uma lib que usava o mesmo algoritmo do serviço de trabalho, mas foi completamente arrancada de tudo, exceto lombok e foi escrita fora do horário de expediente. Portanto, eu queria publicá-lo sob a licença Apache 2.0 no maven central. Mas era tão triste e mal descrito que resolvi deixar um memorando sobre Habré, para que depois, se de repente, não sofresse uma segunda vez.







Se você precisar dele de repente, o libka é publicado aqui .







Então vamos.







Registre-se em sonatype.org



Publicar diretamente no Maven Central não funcionará assim, então usei o serviço intermediário sonatype.org Primeiro, você precisa se registrar lá.







Eles têm documentação sobre como liberar tudo .







, 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. Vá para sonatype.org e feche, libere e descarte seu repositório
  5. LUCRO !!!



All Articles