[JAVA] So fügen Sie mit CircleCI ein weiteres Projekt als Maven-Bibliothek hinzu und verwenden es zum Erstellen

Hintergrund

Es gibt zwei untergeordnete Maven-Projekte, Projekt A und Projekt B, unter einem übergeordneten Maven-Projekt. Projekt A und Projekt B werden CircleCI einzeln über GitHub hinzugefügt und gelten daher als irrelevante Projekte (dh separate Repositorys). Da jedoch Projekt A die Funktionen von Projekt B verwendet, besteht eine Abhängigkeit von Projekt B.

Aufgabe

In der lokalen Umgebung kann die Geschwisterbeziehung zwischen den Projekten A und B über das übergeordnete Maven-Projekt bestätigt werden. Sie können sie also erstellen, indem Sie einfach Projekt B als Abhängigkeit zur pom.xml von Projekt A hinzufügen. Es wird jedoch als irrelevantes Projekt in CircleCI angesehen, sodass "Abhängigkeiten für das Projekt konnten nicht aufgelöst werden" auftreten kann. ** Ich möchte die Abhängigkeitsabhängigkeit beseitigen, ohne die pom.xml von Projekt A zu verschmutzen **.

Lösung

Nach vielen Versuchen und Irrtümern auf verschiedene Weise denke ich, dass die folgende Methode die einfachste und einfachste ist.

  1. Geben Sie das Build-Artefakt von Projekt B als Artefakt aus
  2. Laden Sie auf der Seite von Projekt A das Paket B über die CircleCI-API herunter.
  3. Installieren Sie B als externe Bibliothek durch Maven-Installation, bevor CircleCI die Abhängigkeit entfernt

Detaillierte Vorgehensweise

B. Einführung des Maven Assembly Plugins in Projekt B.

Fügen Sie den folgenden Code in die pom.xml von Projekt B ein. Wenn Sie dies nicht verwenden, besteht die Möglichkeit, dass die von Projekt B verwendete Bibliothek nicht im jar [^ fat-jar] enthalten ist.

<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. Bestimmen Sie das Ergebnis als Artefakt in Projekt B.

Sie müssen die Datei angeben, die Sie als Artefakt an CircleCI ausgeben möchten. Der Weg ist, den folgenden Code zu circle.yml hinzuzufügen.

#...#
general:
    #...#
    artifacts:
        #Dieser Dateiname ist maven-assembly-Scheint die Standardeinstellung für das Plugin zu sein
        - "target/<Dateiname>-<Ausführung>-jar-with-dependencies.jar"
    #...#
#...#

C. Übernehmen Sie Projekt B und bestätigen Sie den erfolgreichen Build

Wenn nichts Seltsames passiert, sollten Sie Erfolg haben. Wenn Sie das Artefakt als Artefakt angeben, können Sie es übrigens auch von der CircleCI-Build-Seite herunterladen. (Im Artefaktgegenstand)

D. Zugriffstoken ausstellen

Wenn es sich um ein privates Projekt handelt, benötigen Sie ein Zugriffstoken, um das Artefakt herunterzuladen. Zugriffstoken können ausgegeben werden, indem Sie in CircleCI "KONTOEINSTELLUNGEN" -> "Persönliche API-Token" -> "Neues Token erstellen" auswählen.

circleci-access-token.PNG

E Hinzufügen eines Zugriffstokens zum Projekt Eine Umgebungsvariable

Da die API beim Erstellen von Projekt A verwendet wird und der Download ausgeführt wird, fügen Sie das Token, wenn es ausgegeben werden kann, in die Umgebungsvariable von Projekt A ein. Der Speicherort ist "PROJEKTEINSTELLUNGEN" -> "Umgebungsvariablen" -> "Variable hinzufügen".

circleci-add-environment-variables.PNG

Erstellen Sie ein Skript zum Hinzufügen von Abhängigkeiten

Erstellen Sie eine Datei mit dem Namen "add_dependencies.sh" und geben Sie den folgenden Inhalt ein (der Projektname lautet project_b, bitte ersetzen Sie den von <> umgebenen Teil durch einen geeigneten Wert). Die in der ersten Zeile hinzugefügte Bibliothek jq wird verwendet, um die von CircleCI [^ jq-lib] zurückgegebene Json-Antwort zu entschlüsseln.

#!/bin/sh
sudo apt-get install jq
currentDirectory=$(pwd)
echo $currentDirectory
downloadUrl=$(curl -sS "https://circleci.com/api/v1.1/project/github/<Benutzer- / Organisationsname>/project_b/latest/artifacts?circle-token=$MY_ACCESS_TOKEN&branch=<Zweigname>" | 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=<Gruppen-ID> -DartifactId=project_b -Dversion=<Ausführung> -Dpackaging=jar -DgeneratePom=true

Fügen Sie der Ausführungsprozedur von CircleCI ein Skript hinzu

Fügen Sie nach Abschluss des Skripts einen Befehl hinzu, um es in der Datei circle.yml von Projekt A auszuführen. Der Zeitpunkt der Ausführung liegt vor dem Auflösen der Abhängigkeit durch CircleCI.

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

Übernehmen Sie Projekt A und bestätigen Sie den erfolgreichen Build

Begrüßen wir den lang erwarteten Bildschirm! circleci-success.PNG

Referenz

Recommended Posts

So fügen Sie mit CircleCI ein weiteres Projekt als Maven-Bibliothek hinzu und verwenden es zum Erstellen
So erstellen Sie eine API mit GraphQL und Rails
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Verwenden Sie Maven, um Ihrer Umgebung Ihre bevorzugte Java-Bibliothek hinzuzufügen.
Verwendung von Truth (Assertion Library für Java / Android)
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So erstellen Sie eine Kopf- oder Fußzeile einmal und verwenden sie auf einer anderen Seite
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
So laden Sie eine Bibliothek aus einer JAR-Datei mit VSCode << So verwenden Sie Maven / Gradle nicht >>
So verwenden Sie das Font Awesome-Symbol für ul und li
Bis Sie mit Maven ein von Scala geschriebenes Projekt erstellen und es mit dem Befehl scala ausführen.
Verfahren zum Übergeben von RealmObject an Fragment und zur Verwendung von Parceler
Verwendung von \ t Escape-Sequenzen, die für Mac und Windows-Java unterschiedlich sind
[Tipps] So lösen Sie Probleme mit XCode und Swift für Anfänger
So lesen Sie eine Datei und behandeln sie als Standardeingabe
Schritte zum Installieren von Maven auf einem Mac und zur Verwendung mit Eclipse
Verwendung von MinIO mit derselben Funktion wie S3 Verwenden Sie Docker-Compose
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker
Verwendung von StringBurrer und Arrays.toString.
CI für Maven-Projekt bei CircleCI
Verwendung von EventBus3 und ThreadMode
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
Wie man mssql-tools mit alpine benutzt
Wie erstelle ich ein Maven-Projekt?
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
Fügen Sie Android eine vorgefertigte JAR-Bibliothek hinzu und rufen Sie sie im Framework auf
[Swift] So verbinden Sie TabBar mit Storyboard Reference und verwenden auch NavigationController
Verwendung der Dateien args :, environment :, env_file: und .env mit dem Befehl docker-compose
(Für Anfänger) [Rails] Zeitsparende Technik! So installieren und verwenden Sie slim
Weisen Sie der Maven-Version automatisch Datum und Build-Nummer für den Tag zu
Ist es möglich, die Bibliothek (aar) in die Android-Bibliothek (aar) zu stellen und zu verwenden?
Verwenden Sie MyBatis, um eine Karte mit einem Schlüssel als Kennung und einem Wert als Entität abzurufen
So fügen Sie ein lokales Glas zu mavens pom.xml hinzu
Verwendung von BootStrap mit Play Framework
So erstellen Sie ein Maven-Repository für 2020
So richten Sie kapt ein und verwenden es
Wie man SquashTM baut und wie man Japanisch unterstützt
[Ruby] Wie man Slice für Anfänger benutzt
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
Verwendung von Teilzeichenfolgen und Substratmethoden
Verwendung von @Builder und @NoArgsConstructor zusammen
So erstellen Sie eine Rails 6-Umgebung mit Docker
Verwendung der Symbolleiste mit Superrand Teil 1 Stellen Sie Zeichen ein und ändern Sie die Farben
Überlegen Sie, wie Sie Ionic-Native, Hybrid und HTML5 für die Produktion mobiler Apps verwenden können
So konvertieren Sie einen Wert eines anderen Typs und weisen ihn einer anderen Variablen zu
Ich mache eine Android-App und sie steckt voller Fehler und wie man sie löst
So richten Sie Computer Vision für die Verfolgung von Bildern und Videos mit TrackingJs ein
So verwenden Sie Eclipse auf meinem PC mit 32 Bit und 2 GB Speicher
[Java] So testen Sie, ob es in JUnit null ist
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
[Ruby] Verwendung der gsub-Methode und der sub-Methode
So verwenden Sie ein Array für HashMap-Schlüssel
Verwendung des Java-Frameworks mit AWS Lambda! ??