2014-12-17 9 views
8

Quindi ho un lavoro nella mia app CI che viene pubblicato su Nexus quando una modifica viene spinta a svilupparsi su un'app.SBT Pubblica solo quando la versione non esiste

C'è un modo per rendere ./sbt pubblicare idempotente? Perché a volte vogliamo eseguire il processo ancora una volta a causa di un problema temporaneo, e sarà errore con:

[16:31:24]java.io.IOException: destination file exists and overwrite == false 
[16:31:24] at org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:75) 
[16:31:24] at org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130) 
[16:31:24] at sbt.ConvertResolver$ChecksumFriendlyURLResolver$class.put(ConvertResolver.scala:78) 
[16:31:24] at sbt.ConvertResolver$PluginCapableResolver$1.put(ConvertResolver.scala:103) 
[16:31:24] at org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216) 

perché non abbiamo urtato il numero di versione. In questo momento sto andando con un hacky:

./sbt publish || true

Così l'uscita del lavoro doesnt 1 e l'errore in CI. C'è un modo migliore?

+0

IMHO, questa sarebbe una soluzione molto elegante. Trovo spesso alcuni bug con la mia configurazione SBT durante la cross-compiling e ho bisogno di pubblicare l'altra versione che è stata saltata. Non voglio liberarmi dal pubblicare l'artefatto per Scala 2.11 solo perché già esiste 2.10. –

risposta

0

Si può sempre refare la versione come parte della build o interrogare Nexus tramite l'API REST per capire se la versione esiste già prima di procedere con una build.

11

È possibile utilizzare

isSnapshot := true 

Questo consente solo un file per essere sovrascritto. Sembra probabile che questo comportamento possa cambiare in futuro.

+0

Al 20160816 questa caratteristica temporale è presente, quindi credo sia sicuro usarla normalmente. – pabloa98

Problemi correlati