Wie können Artifacte wie Jars usw. in das Nexus Maven Central Repository mit einem Mac (Windows analog) hochgeladen werden?
Das geht in 4 Schritten, die hier am Beispiel von de.wenzlaff.dump1090 beschrieben werden.
Einen Atlassian Account und Jira Ticket anlegen
Zuerste benötigen wir einen Accout bei Atlassian den wir hier beantragen können. Evl. haben wir ja auch schon einen.
Dann müssen wir ein Jira Ticket mit „Create Issue“ erstellen, um eine eindeutige GroupId (z.B. de.wenzlaff) die es noch nicht gibt, zu erhalten, hier ein Beispiel für den Jira Ticket Antrag:
Wenn der Mitarbeiter das freigeschaltet hat (das kann etwas dauern), haben wir eine GroupId reserviert.
PGP/GPG Key erstellen und auf Keyserver hochladen
Nun müssen wir für genau die E-Mail Adresse, die wir zur Anmeldung verwendet haben, eine pgp Key erzeugen und diesen auf eine Keyserver hochladen. Das geht mit:
1 |
gpg --gen-key |
auf der Konsole. Dann einen PGP Key mit RSA/RSA und 2048 Bit Größe wählen der nicht abläuft. Dieser Key muss dann noch auf den Keyserver hochgeladen werden mit:
1 |
gpg --send-keys |
Dann ein paar Minuten warten, damit der Key sich auf alle Key-Server verteilen kann. Über die GUI der Key-Server kann man ja mal nach dem Key suchen.
Projekt pom.xml und settings.xml anpassen
Die /Users/BENUTZER/.m2/settings.xml anpassen, mit der Username, Keynummer und dem Passwort z.B.:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<servers> <server> <id>ossrh</id> <username>TWBuild</username> <password>PASSWORD-EINTRAGN</password> </server> </servers> <mirrors></mirrors> <!-- http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html --> <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.executable>/usr/local/bin/gpg</gpg.executable> <gpg.keyname>28E55C44</gpg.keyname> <gpg.passphrase>PASSWORT-EINTRAGEN</gpg.passphrase> </properties> </profile> </profiles> |
Wichtig ist auch der Pfad zu PGP, der bei mir auf dem Mac /usr/local/bin/gpg ist.
Die pom.xml muss mit dem PGP Plugin, Javadoc Plugin, Source Plugin, Staging Plugin und den Servern eingestellt werden, da nicht nur der Binäre Code hochgeladen wird, sondern auch der Quellcode und der Javadoc. So das alles beisammen ist.
Es können nur Release Versionen hochgeladen werden, also kein -SNAPSHOT in der Version der pom.xml eintragen.
Hier ein Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>de.wenzlaff.dump1090</groupId> <artifactId>de.wenzlaff.dump1090</artifactId> <version>0.0.2</version> <packaging>jar</packaging> <name>Thomas Wenzlaff</name> <description>Wrapper for Dump1090</description> <url>http://www.wenzlaff.info</url> <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> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.0.0-M2</junit.jupiter.version> <junit.vintage.version>4.12.0-M2</junit.vintage.version> <junit.platform.version>1.0.0-M2</junit.platform.version> </properties> <licenses> <license> <name>Apache License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> </licenses> <developers> <developer> <name>Thomas Wenzlaff</name> <email>info-anfrage@wenzlaff.de</email> <organization>TWSoft</organization> <organizationUrl>https://www.wenzlaff.de</organizationUrl> </developer> </developers> <scm> <connection>scm:git:git@github.com:IT-Berater/de.wenzlaff.dump1090.git</connection> <developerConnection>scm:git:git@github.com:IT-Berater/de.wenzlaff.dump1090.git</developerConnection> <url>https://github.com/IT-Berater/de.wenzlaff.dump1090</url> </scm> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit.platform.version}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.6</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.3</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>${junit.vintage.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.7</version> <scope>compile</scope> </dependency> <dependency> <!-- jsoup HTML parser library @ http://jsoup.org/ --> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.13</version> </dependency> </dependencies> </project> |
Für die Fehlersuche hilft das Maven Goal:
1 |
mvn help:effective-settings |
Das zeigt die pom.xml an wie sie effektiv sich ergibt. Wer noch Parameter für das PGP Plugin braucht, kann hier nachschauen.
Artifacte hochladen mit dem Nexus-Staging-Maven-Plugin
Hochladen mit dem Maven Goal (des Nexus Staging Maven Plugin):
1 |
mvn clean deploy |
und nach einigen Minuten Wartezeit ist das Artifact auf Maven Central hochgeladen:
Habe ich noch was wichtiges vergessen?
Weitere Infos gibt es bei Sonatype und hier (engl.).