2016-05-10 25 views
3

Ich möchte ein Sbt-Projekt einrichten, so dass es in der richtigen Artefakt-Repository basierend auf dem Zweig (Git) veröffentlichen kann.Einrichten von sbt, um auf Artefakt basierend auf Git-Zweig zu veröffentlichen

Die für this question vorgeschlagene Lösung schlägt vor, das Repository in der Datei build.sbt fest zu codieren.

Allerdings möchte ich die Master-Zweigstelle veröffentlichen "Releases", und eine andere Zweigstelle zu veröffentlichen "Snapshots", mit der gleichen build.sbt-Datei.

Im Idealfall würde Ich mag die folgende:

val gitBranch = taskKey[String]("Determines current git branch")    
gitBranch := Process("git rev-parse --abbrev-ref HEAD").lines.head 

publishTo := {                 
    val myArtifactory = "http://some.where/"   
    if (gitBranch.value == "master")            
    Some("releases" at myArtifactory + "releases")        
    else                   
    Some("snapshots" at myArtifactory + "snapshots")        
}     

aber dies ergibt „Fehler: Eine Einstellung nicht auf eine Aufgabe verlassen können“.

Antwort

3

Eine nahe Lösung ist, mit dem sbt-release Plugin zu arbeiten, und dann isSnapshot (das ist eine Einstellung) zu verwenden, um das Repository auszuwählen.

Die Lösung des ursprünglichen Problems ist einfach gitBranch eine Einstellung vornehmen:

val gitBranch = settingKey[String]("Determines current git branch")    

statt

val gitBranch = taskKey[String]("Determines current git branch")  

Beachten Sie, dass eine Einstellung nur einmal, zu Beginn der sbt Sitzung berechnet wird Daher ist dies nicht geeignet, wenn innerhalb einer Sitzung ein Zweigwechsel stattfindet.