2014-09-16 13 views
7

Ho un progetto GitHub basato su Java, fitnessjiffy-spring (Attualmente sono focalizzato sul ramo "bootstrap"). Dipende da una libreria creata da un altro progetto GitHib, fitnessjiff-etl. Sto cercando di configurare entrambi questi elementi per essere costruiti da Travis CI.Travis CI che non utilizza repository Maven extra fornito in pom.xml

Sfortunatamente, Travis non è sofisticato come Jenkins o Hudson nell'affrontare i progetti Java basati su Maven. Jenkins può facilmente gestire le dipendenze tra i progetti, ma lo stesso concetto non sembra esistere con Travis. Se un progetto dipende da un altro, allora quell'altro progetto deve essere già costruito in precedenza ... e il suo artefatto caricato su qualche repository Maven in cui il primo progetto può scaricarlo successivamente.

La mia libreria "fitnessjiffy-etl" sta costruendo e distribuendo bene. Sto usando Bintray per Maven repository di hosting, e si può chiaramente vedere i miei manufatti oltre HTTP pianura:

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

Nel mio progetto "fitnessjiffy-primavera", sto aggiungendo questa posizione repo Maven direttamente nel pom.xml, in modo che Travis sia in grado di trovare quella dipendenza da artefatto. Here is the state of my POM at the time of this writing. Notare l'elemento <repositories> nella parte inferiore del file.

Quando si crea questo progetto localmente, funziona perfettamente. Posso vederlo scaricando l'artefatto Maven da "http://dl.bintray.com/ ...". Tuttavia, quando provo a costruire su Travis CI, ogni volta fallisce. Posso vedere nel registro della console che Travis sta ancora cercando di scaricare l'artefatto da Maven Central piuttosto che dal mio repository specificato.

Questo ha senso per chiunque altro? Perché Maven utilizza un percorso di repository personalizzato in un file POM quando si costruisce localmente, ma ignora questa configurazione quando è in esecuzione su un build di Travis CI?

risposta

4

Da questo approfondimento, ho scoperto che Travis utilizza il proprio proxy per Maven Central e ha configurato Maven per forzare TUTTE le richieste di dipendenza tramite il proprio proxy. In altre parole, al momento non sembra possibile utilizzare ulteriori repository Maven specificati nel file POM di un progetto costruito su Travis.

Nel mio caso, ho concluso il refactoring in modo tale che il progetto non necessitasse della dipendenza JAR esterna. Sono passato anche a Drone.io, così ho potuto gestire le mie impostazioni sul server di build piuttosto che dover portare un file YAML nel mio repository (che mi ha sempre colpito come un pazzo).

Tuttavia, anche su Drone è ancora un grosso problema gestire le dipendenze tra più progetti (estremamente comune con lo sviluppo Java). Per Java, non penso che al momento ci sia un sostituto adeguato per Jenkins o Hudson, magari in esecuzione su un economico droplet Digital Ocean o qualche altra istanza di provider VPS.

1

Nella fase di installazione aggiungere un $HOME/.m2/settings.xml definire il repository personalizzato.

 
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