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