[JAVA] So erstellen Sie ein Maven-Repository für 2020

Einführung

Wenn Sie ein Java-Ingenieur sind, werden Sie das Maven-Repository wahrscheinlich aus irgendeinem Grund sehr oft verwenden. Ich benutze es sogar mit Gradle.

Wie verwalten Sie Ihre eigene Bibliothek, vorausgesetzt, OSS usw. wird aus dem zentralen Repository entfernt? Wenn Sie lokal entwickeln, ist "mvn install" in Ordnung. Wenn Sie jedoch CI / CD ausführen oder Bibliotheken für Ihr Team oder Ihre Organisation freigeben, ist dies nicht der Fall.

Dieses Mal habe ich zusammengefasst, wie die von Maven erstellte Bibliothek veröffentlicht wird. Ab August 2020 wird übrigens empfohlen, GCS als Repository zu verwenden.

Registrieren Sie sich beim Maven Central Repository

Dies ist das einfachste Verfahren. Das Registrierungsverfahren ist etwas kompliziert, aber es ist ein großer Vorteil, dass das Repository zum Zeitpunkt der Verwendung keine zusätzliche Arbeit leistet. Ich denke, es ist gut, es zu verwenden, wenn Sie die Benutzer als OSS-Bibliothek erweitern möchten.

Richten Sie einen OSS-Repository-Server ein

Als Nächstes müssen Sie einen OSS-Repository-Server einrichten. Dies kann bei internen Repositorys üblich sein. Nexus Repository Manager und JFrog artifactory sind berühmt. Wenn Sie es eilig haben möchten, können Sie auch das .m2-Repository eines CI-Servers wie Jenkins mit Apache usw. veröffentlichen. Es kann nicht im Detail verwaltet werden, aber es funktioniert, daher ist es eine Option, wenn Sie es schnell mit den minimalen Funktionen machen möchten.

Verwenden Sie GitHub-Seiten

Es gibt eine Möglichkeit, "Github Pages" zu verwenden, mit der statische Inhalte auf GitHub gehostet werden können. Es war vor langer Zeit beliebt. Die Grundidee besteht darin, die Bibliothek lokal mit "mvn deploy" bereitzustellen und mit "mvn site" auf Github zu übertragen. Dies ist sehr praktisch, da Sie die Sicherheit / Verfügbarkeit GitHub überlassen können.

Das detaillierte Verfahren wird auf der folgenden Website ausführlich erläutert.

Dies ist eine bequeme Möglichkeit, Ihre eigene Bibliothek öffentlich zu veröffentlichen. Es ist kostenlos.

Verwenden Sie GitHub-Pakete + Aktionen

Die Verwendung von GitHub-Seiten als Maven-Repository ist etwas schwierig, aber seit kurzem ist es möglich, Maven-Bibliothek als formale Methode als GitHub-Pakete zu veröffentlichen.

Registrieren Sie zunächst das Bereitstellungsziel in pom.xml wie folgt.

pom.xml


    <distributionManagement>
        <repository>
            <id>github</id>
            <name>GitHub OWNER Apache Maven Packages</name>
            <url>https://maven.pkg.github.com/{YOUR_NAME}/{YOUR_PRJ_NAME}</url>
        </repository>
    </distributionManagement>

Sie können dies manuell tun, aber die Verwaltung des privaten Schlüssels ist mühsam. Verwenden Sie daher Aktionen.

.github/workflows/maven-publish.yml


name: Publish jl2-web library
on: [ workflow_dispatch ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
        server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
        settings-path: ${{ github.workspace }} # location for the settings.xml file
    - name: Build with Maven
      run: mvn -B package --file jl2-web/pom.xml
    - name: Publish to GitHub Packages Apache Maven
      run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml --file jl2-web/pom.xml
      env:
        GITHUB_TOKEN: ${{ github.token }}

CI / CD funktioniert mit GitHub-Aktionen, die auf dieser YAML basieren. Wenn Sie "GITHUB_TOKEN" verwenden, müssen Sie wahrscheinlich die spezielle "settings.xml" nicht verwalten.

Anschließend wird ein Link aus dem GitHub-Repository erstellt, wie unten gezeigt. image.pngimage.png

Fügen Sie bei Verwendung der hier bereitgestellten Bibliothek das abhängige Repository hinzu, wie in pom.xml unten gezeigt.

pom.xml


    <repositories>
        <repository>
            <id>github</id>
            <name>NKLab repository</name>
            <url>https://maven.pkg.github.com/{YOUR_NAME}/{YOUR_PRJ_NAME}</url>
        </repository>
    </repositories>

Es ist sehr praktisch in Kombination mit GitHub-Aktionen, weist jedoch die folgenden Probleme auf.

--a) Ich wusste nicht, wie ich public ohne Passwort einrichten sollte --b) Berechtigungsverwaltung beim Einfügen mehrerer Bibliotheken in ein Repository

Es ist eine Herausforderung, oder ich weiß einfach nicht, wie ich es machen soll, aber irgendwie scheint es derzeit nicht zu unterstützen. In Bezug auf b verstehe ich, dass dies mit "Personal Access Token" usw. möglich ist, aber ich weiß nicht, wie ich es mit "GITHUB_TOKEN" machen soll, und es steht noch aus.

Es ist praktisch, in GitHub-Aktionen integriert zu werden, und es gibt kein Problem mit internen Bibliotheken, die eine Authentifizierung erfordern. Ich denke, es ist sehr praktisch, wenn Sie ein Team mit GitHub entwickeln. Sie können zwischen einem kostenpflichtigen und einem kostenlosen Tarif wählen.

Erstellen Sie ein Repository in GCS, indem Sie eine Verknüpfung mit dem Maven Plugin herstellen

So bauen Sie auf Objektspeicher wie S3, GCS, Azure Blob auf.

Es ist nicht völlig kostenlos, aber der Objektspeicher ist für jedes Unternehmen billig genug, und IAM jeder Cloud kann Berechtigungen anstelle der Kontoverwaltung von Maven verwalten. Ich denke, dies ist praktisch für diejenigen, die es bereits verwenden. Ich benutze GCP und ich benutze auch CloudBuild, also ist dies am einfachsten.

Es ist einfach zu bedienen und setzt die Erweiterung oder Erweiterung in pom.xml wie folgt. Die neueste Version ist 2.3, wir empfehlen jedoch die Verwendung von 1.7, da die GCS-Unterstützung einen Fehler aufweist.

<distributionManagement>
    <snapshotRepository>
        <id>nklab-snapshot</id>
        <url>gs://{Eimername}/snapshot</url>
    </snapshotRepository>
</distributionManagement>
<build>
    <extensions>
        <extension>
            <groupId>com.gkatzioura.maven.cloud</groupId>
            <artifactId>google-storage-wagon</artifactId>
            <version>1.7</version>
        </extension>
    </extensions>
</build>

Geben Sie einen beliebigen Bucket- und Ordnernamen in "url" ein. Zur Zeit nenne ich das Snapshot Repository "Snapshot". Natürlich können Sie andere als SnapShot bereitstellen, indem Sie das Tag "Repository" hinzufügen.

<distributionManagement>
    <snapshotRepository>
        <id>my-repo-bucket-snapshot</id>
        <url>gs://mavenrepository/snapshot</url>
    </snapshotRepository>
    <repository>
        <id>my-repo-bucket-release</id>
        <url>gs://mavenrepository/release</url>
    </repository>
</distributionManagement>

Stellen Sie dann mit dem folgenden Befehl bereit.

mvn -B deploy 

Zu diesem Zeitpunkt ist die Berechtigungsverwaltung IAM. Wenn Sie also lokal in GCS bereitstellen möchten, müssen Sie die Schlüsseldatei des Dienstkontos in der Umgebungsvariablen wie unten gezeigt angeben. Nun, es ist eine bekannte Methode in GCP. Sie können sich auch authentifizieren, indem Sie sich mit gcloud auth login –brief anmelden.

GOOGLE_APPLICATION_CREDENTIALS=~/seacret/mybuild-1632c221dd5c.json mvn -B deploy

Wenn Sie es verwenden möchten, fügen Sie es wie folgt zur pom.xml-Abhängigkeit hinzu.

<repositories>
    <repository>
        <id>my-repos</id>
        <name>My repository</name>
        <url>https://storage.googleapis.com/{Eimername}/snapshot/</url>
    </repository>
</repositories>

Beim Erstellen aus CloudBuild usw. gibt es kein Problem, solange die Einstellungen auf der GCS-Seite festgelegt sind. Diese Methode ist praktisch für diejenigen, die an GCP gewöhnt sind, da sie der normalen Kontrolle von GCS einschließlich der öffentlichen Einstellung entspricht.

GCP Artifact Registry

Es handelt sich um einen Dienst, der ein Nachfolger oder eine erweiterte Version der Containerregistrierung von Google ist. Ursprünglich unterstützt es nur Docker Container, jetzt unterstützt es auch Maven und nodejs als Alpha-Version.

https://cloud.google.com/artifact-registry?hl=ja

Hier ist das Back-End GCS, aber es hat auch verschiedene Funktionen wie die Automatisierung von Sicherheitsscans und es ist ein Service, dem ich persönlich Aufmerksamkeit schenke. Da GCP für mich die Hauptplattform ist, scheint es mit jedem System wie CloudBuild kompatibel zu sein.

Dies ist jedoch eine Alpha-Version vom 08.08.2020, sodass Sie sie nur verwenden können, wenn Sie sich bewerben. Ich habe es vorerst beantragt, aber noch nicht ausprobiert. Ich glaube, dass es von Herbst bis Ende des Jahres für allgemeine Benutzer als β verfügbar sein wird.

Zusammenfassung

Das Hosten des Repositorys von Maven ist mühsam, daher ist es ein ärgerliches Problem, aber in letzter Zeit gibt es einige andere Optionen als das Hosten von OSS selbst. Es ist auch wichtig, dass CI / CD realisiert wird. Daher möchte ich diesen Bereich gut nutzen, damit ich interne Bibliotheken und persönliche Bibliotheken problemlos freigeben / veröffentlichen kann.

Dann viel Spaß beim Hacken!

Recommended Posts

So erstellen Sie ein Maven-Repository für 2020
So erstellen Sie überall eine H2-Datenbank
So erstellen Sie Pagenationen für das "Kaminari" -Array
So erstellen Sie eine Methode
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
Wie erstelle ich ein Maven-Projekt?
So erstellen Sie ein leichtes Container-Image für Java-Apps
So erstellen und starten Sie eine Docker-Datei für Payara Micro
[Swift5] So erstellen Sie einen Begrüßungsbildschirm
[Rails] So erstellen Sie eine Teilvorlage
So erstellen Sie Docker-Compose
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So erstellen Sie ein Thema in Liferay 7 / DXP
So erstellen Sie eine leichte JRE für den Vertrieb
[1.] So erstellen Sie ein Spring-MVC-Framework-Projekt
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So verwenden Sie ein Array für den TreeMap-Schlüssel
So schreiben Sie einen Komponententest für Spring Boot 2
So erstellen Sie eine JDBC-URL (Oracle Database, Thin)
Wie hinterlasse ich einen Kommentar?
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So erstellen Sie einen Daten-URI (base64) in Java
[Für diejenigen, die Portfolios erstellen] Verwendung von Font-Awesome-Rails
Wie erstelle ich einen MOD für Slay the Spire?
So fügen Sie ein Video ein
[Apple-Abonnementangebot] So erstellen Sie eine Signatur für ein Werbeangebot
Ich möchte eine generische Anmerkung für einen Typ erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
SDWebImage: So löschen Sie den Cache für eine bestimmte UIImageView
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
[Für diejenigen, die Portfolios erstellen] Verwendung von Chart Kick
So geben Sie Array-Werte ohne Verwendung einer for-Anweisung aus
[Für diejenigen, die Portfolios erstellen] So lassen Sie Zeichenketten weg
Minecraft Modding [1.12] So fügen Sie einen speziellen Render für Item hinzu
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
So erstellen Sie ein Service Builder-Portlet in Liferay 7 / DXP
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0
So legen Sie die Validierung für time_field fest
So installieren Sie JMeter für Mac
Vorbereiten der Erstellung einer Rails-Anwendung
So erstellen Sie einen Java-Container
Wie unterschreibe ich Minecraft MOD?
So erstellen Sie einen JDBC-Treiber
[Swift] So senden Sie eine Benachrichtigung
Verfahren zum Veröffentlichen im Maven Central Repository
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Versuchen Sie, eine Server-Client-App zu erstellen
So erstellen Sie ein Java-Array
Erstellen Sie ein Maven-Projekt mit Befehlen