2014-09-16 16 views
7

Mam oparty na Javie projekt GitHub, fitnessjiffy-spring (obecnie koncentruję się na gałęzi "bootstrap"). To zależy od biblioteki zbudowanej z innego projektu GitHib, fitnessjiff-etl. Próbuję skonfigurować oba te elementy, aby zostały zbudowane przez Travis CI.Travis CI nie korzystając z dodatkowego repozytorium Maven dostępnego w pom.xml

Niestety, Travis nie jest tak wyrafinowany jak Jenkins czy Hudson w radzeniu sobie z projektami Java opartymi na Maven. Jenkins może z łatwością obsługiwać zależności między projektami, ale ta sama koncepcja nie wydaje się istnieć w Travis. Jeśli jeden projekt zależy od innego, to ten drugi projekt musi być już wcześniej zbudowany ... i jego artefakt przesłany do repozytorium Maven, gdzie pierwszy projekt może go później pobrać.

Moja biblioteka "fitnessjiffy-etl" buduje i wdraża dobrze. Używam Bintray dla Maven repozytorium hosting, i można wyraźnie zobaczyć moje artefakty ponad zwykły HTTP pod adresem:

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

W moim „fitnessjiffy sprężynowym” projektu, dodaję to Maven lokalizację repo bezpośrednio w pom.xml, dzięki czemu Travis będzie mógł znaleźć tę zależność od artefaktów. Here is the state of my POM at the time of this writing. Zwróć uwagę na element <repositories> na dole pliku.

Kiedy buduję ten projekt lokalnie, działa dobrze. Widzę, jak pobierał artefakt Mavena z "http://dl.bintray.com/ ...". Jednak kiedy próbuję budować Travis CI, to za każdym razem się nie udaje. W dzienniku konsoli widzę, że Travis wciąż próbuje pobrać artefakt z Maven Central zamiast z mojego określonego repo.

Czy ma to sens dla kogokolwiek innego? Dlaczego Maven wykorzystuje niestandardową lokalizację repozytorium w pliku POM podczas budowania lokalnie, ale ignoruje tę konfigurację podczas działania w kompilacji Travis CI?

Odpowiedz

4

Odkopując to dalej, odkryłem, że Travis używa własnego serwera proxy dla Maven Central i skonfigurował Mavena do wymuszania WSZYSTKICH żądań zależności za pośrednictwem ich proxy. Innymi słowy, obecnie nie wydaje się możliwe korzystanie z dodatkowych repozytoriów Maven określonych w pliku POM projektu zbudowanego na Travisie.

W moim przypadku zakończyłem refaktoryzację tak, że projekt nie potrzebuje zewnętrznej zależności JAR. Przełączyłem się również na Drone.io, więc mogłem zarządzać moimi ustawieniami na serwerze kompilacji, zamiast przenosić plik YAML do mojego repozytorium (co zawsze wydawało mi się trochę głupie).

Jednak nawet w przypadku Drone nadal jest to poważna trudność w zarządzaniu zależnościami między wieloma projektami (bardzo często w przypadku programowania w języku Java). W przypadku Javy po prostu nie sądzę, że obecnie istnieje odpowiedni substytut Jenkinsa lub Hudsona, może działający na taniej kropli Digital Ocean lub innej instancji dostawcy VPS.

1

W swojej fazie instalacyjnej dodaj $HOME/.m2/settings.xml zdefiniować swoje repozytorium niestandardowe.

 
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