[JAVA] Comment ajouter un autre projet en tant que bibliothèque Maven avec CircleCI et l'utiliser pour la construction

Contexte

Sous un projet Maven parent, il existe deux projets Maven enfants, le projet A et le projet B. Le projet A et le projet B sont ajoutés individuellement à CircleCI via GitHub et sont donc considérés comme des projets non pertinents (c'est-à-dire des référentiels séparés). Cependant, comme le projet A utilise les fonctions du projet B, il existe une dépendance au projet B.

Tâche

Dans l'environnement local, la relation fraternelle entre les projets A et B peut être confirmée via le projet Maven parent, vous pouvez donc construire en ajoutant simplement le projet B en tant que dépendance au pom.xml du projet A. Cependant, il est considéré comme un projet non pertinent sur CircleCI, donc «Impossible de résoudre les dépendances du projet» peut se produire. ** Je veux éliminer la dépendance de dépendance sans polluer le pom.xml du projet A **.

Solution

Après de nombreux essais et erreurs de différentes manières, je pense que la méthode suivante est la plus simple et la plus facile à faire.

  1. Sortez l'artefact de construction du projet B comme artefact
  2. Du côté du projet A, téléchargez le package B via l'API CircleCI.
  3. Installez B en tant que bibliothèque externe via l'installation de Maven avant que CircleCI ne résout la dépendance

Procédure détaillée

B. Introduction du plug-in d'assemblage Maven dans le projet B

Placez le code suivant dans le pom.xml du projet B. Si vous ne l'utilisez pas, il est possible que la bibliothèque utilisée par le projet B ne soit pas incluse dans le fichier jar [^ fat-jar].

<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">
  <!-- ... -->
  <build>
    <plugins>
      <!-- ... -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.5</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>assemble-all</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- ... -->
    </plugins>
  </build>
  <!-- ... -->
</project>

B. Désigner le livrable comme artefact dans le projet B

Vous devez spécifier le fichier que vous souhaitez exporter vers CircleCI sous forme d'artefact. La méthode consiste à ajouter le code suivant à circle.yml.

#...#
general:
    #...#
    artifacts:
        #Ce nom de fichier est maven-assembly-Semble être la valeur par défaut pour le plugin
        - "target/<nom de fichier>-<version>-jar-with-dependencies.jar"
    #...#
#...#

C. Valider le projet B et confirmer la construction réussie

À moins que quelque chose d'étrange ne se produise, vous devriez réussir. À propos, si vous spécifiez l'artefact comme artefact, vous pouvez également le télécharger à partir de la page de construction CircleCI. (Dans l'élément des artefacts)

D. Émettre un jeton d'accès

S'il s'agit d'un projet privé, vous aurez besoin d'un jeton d'accès pour télécharger l'artefact. Les jetons d'accès peuvent être émis en sélectionnant «PARAMÈTRES DU COMPTE» -> «Jetons API personnels» -> «Créer un nouveau jeton» dans CircleCI.

circleci-access-token.PNG

E Ajouter un jeton d'accès au projet Une variable d'environnement

Étant donné que l'API est utilisée dans la construction du projet A et que le téléchargement est effectué, si le jeton peut être émis, placez-le dans la variable d'environnement du projet A. L'emplacement est "PARAMETRES DU PROJET" -> "Variables d'environnement" -> "Ajouter une variable".

circleci-add-environment-variables.PNG

Créer un script pour ajouter une dépendance

Créez un fichier appelé ʻadd_dependencies.sh` et mettez le contenu suivant (le nom du projet est project_b, veuillez remplacer la partie entourée par <> par une valeur appropriée). La bibliothèque jq ajoutée dans la première ligne permet de décrypter la réponse Json renvoyée par CircleCI [^ jq-lib].

#!/bin/sh
sudo apt-get install jq
currentDirectory=$(pwd)
echo $currentDirectory
downloadUrl=$(curl -sS "https://circleci.com/api/v1.1/project/github/<Nom de l'utilisateur / de l'organisation>/project_b/latest/artifacts?circle-token=$MY_ACCESS_TOKEN&branch=<Nom de la filiale>" | jq '.[] | .url' | grep project_b.*with-dependencies\.jar | sed -e "s/\"//g")
echo $downloadUrl
sudo wget $downloadUrl?circle-token=$MY_ACCESS_TOKEN -O project_b.jar --quiet
mvn install:install-file -Dfile=$currentDirectory/project_b.jar -DgroupId=<ID de groupe> -DartifactId=project_b -Dversion=<version> -Dpackaging=jar -DgeneratePom=true

Ajouter un script à la procédure d'exécution de CircleCI

Une fois le script terminé, ajoutez une commande pour l'exécuter dans le fichier circle.yml du projet A. Le moment de l'exécution est avant que CircleCI ne résout la dépendance.

# ... #
dependencies:
    pre:
        - sudo chmod a+x add_dependencies.sh
        - ./add_dependencies.sh
# ... #

Validez le projet A et confirmez la construction réussie

Accueillons l'écran tant attendu! circleci-success.PNG

Référence

Recommended Posts

Comment ajouter un autre projet en tant que bibliothèque Maven avec CircleCI et l'utiliser pour la construction
Comment créer une API avec GraphQL et Rails
Comment créer un environnement Docker avec Gradle pour IntelliJ
Utilisez Maven pour ajouter votre bibliothèque Java préférée à votre environnement.
Comment utiliser Truth (bibliothèque d'assertions pour Java / Android)
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment créer un en-tête ou un pied de page une fois et l'utiliser sur une autre page
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Comment charger une bibliothèque à partir d'un fichier JAR avec VSCode << Comment ne pas utiliser Maven / Gradle >>
Comment utiliser l'icône Font Awesome pour ul et li
Jusqu'à ce que vous construisiez un projet écrit scala avec Maven et que vous l'exécutiez avec la commande scala.
Procédures pour transmettre RealmObject à Fragment et comment utiliser Parceler
Comment utiliser des séquences \ t Escape différentes pour Mac et Windows-java
[Astuces] Comment résoudre les problèmes avec XCode et Swift pour les débutants
Comment lire un fichier et le traiter comme une entrée standard
Étapes pour installer Maven sur Mac et l'utiliser avec Eclipse
Comment utiliser MinIO avec la même fonction que S3 Utiliser docker-compose
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker
Comment utiliser StringBurrer et Arrays.toString.
Projet CI pour Maven chez CircleCI
Comment utiliser EventBus3 et ThreadMode
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment utiliser mssql-tools avec Alpine
Comment faire un projet Maven
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant
Ajoutez une bibliothèque jar pré-construite à Android et appelez-la dans le cadre
[Swift] Comment connecter TabBar avec Storyboard Reference et également utiliser NavigationController
Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose
(Pour les débutants) [Rails] Technologie de gain de temps! Comment installer et utiliser Slim
Attribuer automatiquement la date et le numéro de build du jour à la version Maven
Est-il possible de mettre la bibliothèque (aar) dans la bibliothèque Android (aar) et de l'utiliser?
Utilisez MyBatis pour obtenir une carte avec une clé comme identifiant et une valeur comme entité
Comment ajouter un pot local au pom.xml de Maven
Comment utiliser BootStrap avec Play Framework
Comment créer un référentiel Maven pour 2020
Comment configurer et utiliser kapt
Comment créer SquashTM et comment prendre en charge le japonais
[Ruby] Comment utiliser slice pour les débutants
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
[Java] [Maven3] Résumé de l'utilisation de Maven3
Comment utiliser les méthodes substring et substr
Comment utiliser @Builder et @NoArgsConstructor ensemble
Comment créer un environnement Rails 6 avec Docker
Comment utiliser ToolBar avec la super marge Part1 Définir les caractères et changer les couleurs
Réflexion sur la façon d'utiliser Ionic-Native, Hybrid et HTML5 pour la production d'applications mobiles
Comment convertir une valeur d'un type différent et l'affecter à une autre variable
Je crée une application Android et elle est bloquée par des erreurs et comment la résoudre
Comment configurer la vision par ordinateur pour le suivi des images et des vidéos avec TrackingJs
Comment utiliser Eclipse sur mon PC avec 32 bits et 2 Go de mémoire
[Java] Comment tester s'il est nul dans JUnit
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment utiliser un tableau pour les clés HashMap
Comment utiliser le framework Java avec AWS Lambda! ??