Vorwort
Ich beschloss, etwas Nützliches zu tun. Es gab ein Projekt, bei dem wir ein neues machen mussten, aber besser als der alte Service. Der Service ist großartig, 10.000 Zeilen Geschäftsregeln + 15.000 Zeilen Java-Code. Jetzt sind es doppelt so viele. Aber da es viel Logik gibt und sich niemand wirklich an viel erinnert (deshalb mussten wir Tests, Docks und ein Minimum an Fehlern durchführen), war es notwendig, den alten und den neuen Dienst zu vergleichen. Damit unsere Tester nicht an Altersschwäche sterben und versuchen, alles zu überprüfen, dachte ich und schrieb einen Dienst, der die alte und die neue API abzog, den Unterschied in den Antworten verglich und in der Datenbank zusammenführte, damit die Tester dies überprüfen und wir den Unterschied beheben konnten. Aber hier ist das Problem: Am Eingang haben wir viele Parameter und ihre möglichen Werte. Dies sind Milliarden von Kombinationen. Sie werden mehrere Monate lang unter Volllast überprüft, und es gibt viele ähnliche.
Infolgedessen entstand zunächst die Idee, mögliche Änderungen von Parametern zu übernehmen und zu reduzieren und im Allgemeinen einen Teil der Aufzählung wegzuwerfen. Dann wurde die Theorie des paarweisen Testens übernommen, die es ermöglichte, alle Parameter und alle Werte zu werfen und alles vollständig zu überprüfen.
Diese einfache Theorie besagt, dass wir fast 90% der Fehler abdecken, wenn wir Testfälle erstellen, in denen jedes Parameterpaar mindestens einmal auftritt. Gleichzeitig können Sie alles so auswählen, dass es nicht Milliarden von Testfällen gibt, sondern vielleicht mehrere Tausend. Hervorragendes Ergebnis! Infolgedessen fanden wir Hunderte von Unstimmigkeiten und sogar eine Reihe von Fehlern im Legacy-Service und ließen die Verfasser der Geschäftslogik über etwas nachdenken, über das sie noch nie nachgedacht hatten, da wir ihnen nur neue interessante Testfälle zuwarf, in denen nicht klar war, wie Recht".
Der Code ist geschrieben, alles funktioniert, alle sind glücklich, aber irgendwie wollte ich den Testfallgenerator nicht wegwerfen, also setzte ich mich am Wochenende hin und schrieb eine Bibliothek, die den gleichen Algorithmus wie im Arbeitsdienst verwendete, aber von allem außer Lombok völlig abgerissen wurde und geschrieben wurde außerhalb der Bürozeiten. Daher wollte ich es unter der Apache 2.0-Lizenz im Maven Central veröffentlichen. Aber es war so trostlos und schlecht beschrieben, dass ich mich entschied, ein Memo über Habré zu hinterlassen, damit ich später, wenn auch plötzlich, kein zweites Mal leiden würde.
Wenn Sie es plötzlich brauchen, wird die libka hier veröffentlicht .
So lass uns gehen.
Registrieren Sie sich auf sonatype.org
Das direkte Veröffentlichen in Maven Central funktioniert nicht einfach so, daher habe ich den Zwischendienst sonatype.org verwendet. Zuerst müssen Sie sich dort registrieren.
Sie haben Dokumentation, wie man alles freigibt .
: gnupg, maven release plugin . , git , . . . .
GNUpg
. , , . , . , GUI , . gpa , .
:
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>
staging
, , , , sonatype.org
mvn release:clean release:prepare mvn release:perform
, , , . , Maven Central . ( ) . "", Close. , Release Drop. . , , Maven Central
!
- sonatype.org
- settings.xml
- pom.xml
- Gehen Sie zu sonatype.org und schließen Sie Ihr Repository, geben Sie es frei und löschen Sie es
- GEWINN !!!