2014-09-16 6 views
7

Ich habe ein Java-basiertes GitHub-Projekt, fitnessjiffy-spring (Ich bin derzeit auf den "Bootstrap" Zweig konzentriert). Es hängt von einer Bibliothek ab, die aus einem anderen GitHib-Projekt besteht, fitnessjiff-etl. Ich versuche beide zu konfigurieren, um von Travis CI gebaut zu werden.Travis CI verwendet kein zusätzliches Maven-Repository in pom.xml

Leider ist Travis nicht so anspruchsvoll wie Jenkins oder Hudson im Umgang mit Maven-basierten Java-Projekten. Jenkins kann Abhängigkeiten zwischen Projekten leicht handhaben, aber das gleiche Konzept scheint bei Travis nicht zu existieren. Wenn ein Projekt von einem anderen abhängt, muss dieses andere Projekt bereits zuvor erstellt und sein Artefakt in ein Maven Repo hochgeladen werden, wo das erste Projekt es später herunterladen kann.

Meine "fitnessjiffy-etl" -Bibliothek erstellt und implementiert einfach gut. Ich verwende Bintray für Maven-Repository-Hosting, und Sie können meine Artefakte über Plain-HTTP bei deutlich sehen:

http://dl.bintray.com/steve-perkins/maven/

In meinem "fitnessjiffy-spring" Projekt, Ich füge dieses Maven Repo-Lage direkt in der pom.xml, damit Travis diese Artefaktabhängigkeit finden kann. Here is the state of my POM at the time of this writing. Beachten Sie das Element <repositories> am Ende der Datei.

Wenn ich dieses Projekt lokal erstellen, funktioniert es gut. Ich kann es sehen, das Maven-Artefakt von "http://dl.bintray.com/ ..." herunterzuladen. Wenn ich jedoch versuche, Travis CI zu bauen, versagt es jedes Mal. Ich kann im Konsolenprotokoll sehen, dass Travis immer noch versucht, das Artefakt von Maven Central herunterzuladen, anstatt von meinem angegebenen Repo.

Macht das für irgendjemanden Sinn? Warum verwendet Maven beim lokalen Erstellen eines benutzerdefinierten Repository-Speicherorts in einer POM-Datei, ignoriert diese Konfiguration jedoch, wenn es auf einem Travis-CI-Build ausgeführt wird?

Antwort

4

Aus weiter graben, entdeckte ich, dass Travis einen eigenen Proxy für Maven Central verwendet und Maven konfiguriert hat, um ALLE Abhängigkeitsanforderungen über ihren Proxy zu erzwingen. Mit anderen Worten, es scheint zu diesem Zeitpunkt nicht möglich zu sein, zusätzliche Maven-Repos zu verwenden, die in der POM-Datei eines auf Travis gebauten Projekts spezifiziert sind.

In meinem Fall endete ich Refactoring so, dass Projekt nicht die externe JAR-Abhängigkeit benötigt. Ich wechselte auch zu Drone.io, damit ich meine Einstellungen auf dem Build-Server verwalten konnte, anstatt eine YAML-Datei in meinem Repository zu haben (was mir immer ein bisschen dämlich vorkam).

Aber selbst bei Drohne ist es immer noch ein großer Aufwand, Abhängigkeiten zwischen mehreren Projekten zu verwalten (extrem häufig bei der Java-Entwicklung). Für Java glaube ich nicht, dass es momentan einen adäquaten Ersatz für Jenkins oder Hudson gibt, der vielleicht auf einem billigen Digital Ocean Tröpfchen oder einer anderen VPS Provider-Instanz läuft.

1

In Ihrer Installationsphase fügen Sie eine $HOME/.m2/settings.xml definieren Sie Ihr benutzerdefiniertes Repository.

 
cache: 
    directories: 
    - "$HOME/.m2" 
install: 
- curl -o $HOME/.m2/settings.xml 
    https://raw.githubusercontent.com/trajano/trajano/master/src/site/resources/settings.xml 
- mvn dependency:go-offline 
script: 
- mvn clean install site