[JAVA] Comment créer un référentiel Maven pour 2020

introduction

Si vous êtes un ingénieur Java, vous utiliserez probablement le référentiel Maven très souvent pour une raison quelconque. Je l'utilise même avec Gradle.

Comment gérez-vous votre propre bibliothèque, en supposant que OSS etc. sera supprimé du référentiel central? Si vous développez localement, «mvn install» convient, mais si vous faites du CI / CD ou partagez des bibliothèques avec votre équipe ou organisation, ce n'est pas le cas.

J'ai donc cette fois résumé la méthode de publication de la bibliothèque créée par Maven. À propos, à partir d'août 2020, la méthode recommandée est d'utiliser GCS comme référentiel.

Inscrivez-vous au référentiel central Maven

C'est la procédure la plus simple. La procédure d'enregistrement est un peu compliquée, mais c'est un gros avantage qu'il n'y a pas de travail supplémentaire du référentiel au moment de l'utilisation. Je pense qu'il est bon de l'utiliser lorsque vous souhaitez étendre les utilisateurs en tant que bibliothèque OSS.

Configurer un serveur de référentiel OSS

La prochaine chose à considérer est de configurer un serveur de référentiel OSS. Cela peut être courant pour les référentiels internes. Nexus Repository Manager et JFrog artifactory sont célèbres. Si vous voulez le faire rapidement, vous pouvez également publier le référentiel .m2 d'un serveur CI tel que Jenkins avec Apache etc. Je ne peux pas le gérer en détail, mais cela fonctionne, c'est donc une option lorsque vous voulez le faire rapidement avec le minimum de fonctions.

Utiliser les pages GitHub

Il existe un moyen d'utiliser "Pages Github" qui peut héberger du contenu statique sur GitHub. C'était populaire il y a longtemps. L'idée de base est de déployer la bibliothèque localement avec mvn deploy et de la pousser sur Github avec mvn site. C'est assez pratique car vous pouvez laisser la sécurité / disponibilité à GitHub.

La procédure détaillée est expliquée en détail sur le site suivant.

C'est un moyen pratique de publier votre propre bibliothèque dans Public. C'est gratuit.

Utiliser les packages GitHub + les actions

Utiliser les pages GitHub comme référentiel Maven est un peu piraté, mais il est récemment devenu possible de publier la bibliothèque maven comme méthode formelle sous forme de packages GitHub.

Tout d'abord, enregistrez la destination de déploiement dans pom.xml comme suit.

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>

Vous pouvez le faire manuellement, mais la gestion de la clé privée est un problème, alors utilisez Actions.

.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 fonctionne avec les actions GitHub basées sur ce YAML. Si vous utilisez GITHUB_TOKEN, vous n'avez probablement pas besoin de gérer les paramètres spéciaux settings.xml.

Ensuite, un lien sera créé à partir du référentiel GitHub comme indiqué ci-dessous. image.pngimage.png

Lorsque vous utilisez la bibliothèque déployée ici, ajoutez le référentiel dépendant comme indiqué dans pom.xml ci-dessous.

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>

Il est très pratique en combinaison avec les actions GitHub, mais il présente les problèmes suivants.

--a) Je ne savais pas comment configurer public sans mot de passe --b) Gestion des permissions lors du placement de plusieurs bibliothèques dans un référentiel

C'est un défi, ou tout simplement je ne sais pas comment le faire, mais d'une manière ou d'une autre, cela ne semble pas le soutenir pour le moment. Concernant b, je comprends que cela peut être fait en utilisant jeton d'accès personnel etc., mais je ne sais pas comment le faire avec GITHUB_TOKEN et c'est un peu en attente.

Il est pratique d'être intégré à GitHub Actions, et il n'y a pas de problème s'il s'agit d'une bibliothèque interne qui nécessite une authentification, donc je pense que c'est très pratique lors du développement d'une équipe utilisant GitHub. Vous pouvez choisir entre un forfait payant et un forfait gratuit.

Construire un référentiel dans GCS en le liant avec Maven Plugin

Comment s'appuyer sur le stockage d'objets comme S3, GCS, Azure Blob.

Ce n'est pas totalement gratuit, mais le stockage d'objets est assez bon marché pour chaque entreprise, et IAM de chaque cloud peut gérer les autorisations au lieu de la gestion de compte de Maven, donc je pense que c'est pratique pour ceux qui l'utilisent déjà. J'utilise GCP et j'utilise également CloudBuild, c'est donc le plus simple.

Il est facile à utiliser et définissez l'extension ou l'extension dans pom.xml comme suit. La dernière version est la version 2.3, mais nous vous recommandons d'utiliser la version 1.7 car il y a un bogue dans le support GCS.

<distributionManagement>
    <snapshotRepository>
        <id>nklab-snapshot</id>
        <url>gs://{Nom du godet}/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>

Entrez un nom de compartiment et un nom de dossier dans ʻurl. Pour le moment, je nomme le Snapshot Repository «snapshot». Bien sûr, vous pouvez déployer autre chose que SnapShot en ajoutant la balise repository`.

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

Puis déployez avec la commande suivante.

mvn -B deploy 

À ce stade, la gestion des autorisations sera IAM, donc si vous souhaitez déployer localement sur GCS, vous devez spécifier le fichier de clé du compte de service dans la variable d'environnement comme suit. Eh bien, c'est une méthode familière dans GCP. Vous pouvez également vous authentifier en vous connectant avec gcloud auth login –brief.

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

Si vous souhaitez l'utiliser, ajoutez-le à la dépendance pom.xml comme suit.

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

Lors de la construction à partir de CloudBuild, etc., il n'y a pas de problème particulier tant que les paramètres du côté GCS sont définis. Cette méthode est pratique pour ceux qui sont habitués à GCP car elle est identique au contrôle normal de GCS, y compris le paramètre public.

GCP Artifact Registry

C'est un service qui est un successeur ou une version avancée du Container Registry de Google. À l'origine, il ne prend en charge que Docker Container, mais désormais, il prend également en charge Maven et nodejs en version alpha.

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

Ici, le back-end est GCS, mais il a également diverses fonctions telles que l'automatisation des scans de sécurité, et c'est un service auquel je prête personnellement attention. Étant donné que GCP est la plate-forme principale pour moi, il semble être compatible avec chaque système tel que CloudBuild.

Cependant, il s'agit d'une version alpha du 08/08/2020, vous ne pouvez donc pas l'utiliser à moins de postuler. J'en ai fait la demande pour le moment, mais je ne l'ai pas encore essayé. De l'automne à la fin de l'année, j'ai le sentiment qu'il sera disponible pour les grand public en tant que β.

Résumé

L'hébergement du référentiel de Maven est un problème, c'est donc un problème ennuyeux, mais récemment, il existe de nombreuses options autres que l'hébergement d'OSS vous-même. Il est également important en tant que partie qui réalise CI / CD, donc je voudrais faire bon usage de cette zone afin que je puisse facilement partager / publier des bibliothèques internes et des bibliothèques personnelles.

Alors bon piratage!

Recommended Posts

Comment créer un référentiel Maven pour 2020
Comment créer une base de données H2 n'importe où
Comment créer des pages pour le tableau "kaminari"
Comment créer une méthode
[Spring Boot] Comment créer un projet (pour les débutants)
Comment faire un projet Maven
Comment créer une image de conteneur légère pour les applications Java
Comment créer et lancer un Dockerfile pour Payara Micro
[Swift5] Comment créer un écran de démarrage
[rails] Comment créer un modèle partiel
Comment créer docker-compose
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment créer une classe qui hérite des informations de classe
Comment créer un thème dans Liferay 7 / DXP
Comment créer un JRE léger pour la distribution
[1st] Comment créer un projet de framework Spring-MVC
Comment créer facilement un pull-down avec des rails
[Rails] Comment créer un bouton de partage Twitter
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Comment créer un environnement Java en seulement 3 secondes
Comment utiliser un tableau pour la clé TreeMap
Comment écrire un test unitaire pour Spring Boot 2
Comment créer une URL JDBC (Oracle Database, Thin)
Comment laisser un commentaire
Comment créer un projet Spring Boot dans IntelliJ
Comment créer un URI de données (base64) en Java
[Pour ceux qui créent des portfolios] Comment utiliser font-awesome-rails
Comment faire un MOD pour Slay the Spire
Comment insérer une vidéo
[Offre d'abonnement Apple] Comment créer une signature d'offre promotionnelle
Je souhaite créer une annotation générique pour un type
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
SDWebImage: Comment vider le cache pour une UIImageView particulière
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment créer une partie d'espace réservé à utiliser dans la clause IN
[Pour ceux qui créent des portefeuilles] Comment utiliser Chart kick
Comment générer des valeurs de tableau sans utiliser d'instruction for
[Pour ceux qui créent des portfolios] Comment omettre les chaînes de caractères
Minecraft Modding [1.12] Comment attacher un rendu spécial pour Item
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
Comment créer un portlet de générateur de services dans Liferay 7 / DXP
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
Comment spécifier la validation pour time_field
Comment installer JMeter pour Mac
Préparation à la création de l'application Rails
Comment créer un conteneur Java
Comment signer Minecraft MOD
Comment créer un pilote JDBC
[Swift] Comment envoyer une notification
Procédure de publication dans le référentiel central Maven
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Essayez de créer une application client serveur
Comment créer un tableau Java