Wie können Artifacte nach Maven Central (Nexus) mit einem Mac hochgeladen werden?

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:

Ticket erstellen

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:

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:

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.:

<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:

<?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>[email protected]</email>
			<organization>TWSoft</organization>
			<organizationUrl>https://www.wenzlaff.de</organizationUrl>
		</developer>
	</developers>

	<scm>
		<connection>scm:git:[email protected]:IT-Berater/de.wenzlaff.dump1090.git</connection>
		<developerConnection>scm:git:[email protected]: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:

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):

mvn clean deploy

und nach einigen Minuten Wartezeit ist das Artifact auf Maven Central hochgeladen:

bildschirmfoto-2016-11-04-um-12-58-51

Habe ich noch was wichtiges vergessen?

Weitere Infos gibt es bei Sonatype und hier (engl.).

Ähnliche Artikel:

  1. Wie können auf einem Mac OS X dmg (Apple disk image) Archive mit Maven und hdiutil erstellt werden?
  2. Wie kann ein BE-Model (ecore) mit Eclipse Modeling Framework (EMF) unter Eclipse Luna 4.4.2 und Texo generiert werden?
  3. JUnit 4.12 erschienen

wallpaper-1019588
[Comic] Seven Sons
wallpaper-1019588
Momentary Lily: Original-Anime angekündigt
wallpaper-1019588
LUCK LIFE: Band feiert Europapremiere auf der Connichi
wallpaper-1019588
Wind Breaker: Deutscher Simuldub bei Crunchyroll gestartet