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.
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 **.
Nach vielen Versuchen und Irrtümern auf verschiedene Weise denke ich, dass die folgende Methode die einfachste und einfachste ist.
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>
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"
#...#
#...#
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)
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.
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".
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 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
# ... #
Begrüßen wir den lang erwarteten Bildschirm!
Recommended Posts