2014-05-10 17 views
6

Sto appena iniziando a provare a configurare un flusso di lavoro con scala e sbt e ho problemi con il mio repository. Sto cercando di pubblicare una semplice libreria di test, che è composta da due progetti, e la uso da un altro programma. costruireSBT non trova le istantanee in un repository Maven Artifactory

La mia biblioteca di origine contiene il seguente:

val sharedSettings = Seq(
    name := "test-lib", 
    organization := "com.example", 
    version := "0.1-SNAPSHOT", 
    scalaVersion := "2.11.0", 
    publishTo := Some("Artifactory Realm" at "http://localhost:8081/artifactory/libs-snapshot-local"), 
    publishMavenStyle := true, 
    credentials += Credentials(Path.userHome/".ivy2"/".credentials") 
) 

lazy val root = project.in(file(".")).settings(sharedSettings: _*).aggregate(child1, child2) 

lazy val sharedCode = project.settings(sharedSettings: _*) 

val child1Settings = sharedSettings ++ Seq(unmanagedSourceDirectories in Compile <++= (unmanagedSourceDirectories in sharedCode) in Compile) 

val child2Settings = sharedSettings ++ Seq(unmanagedSourceDirectories in Compile <++= (unmanagedSourceDirectories in sharedCode) in Compile) 

lazy val child1 = project.settings(child1Settings: _*) 

lazy val child2 = project.settings(child2Settings: _*) 

posso correre sbt pubblicare va bene, e crea la directory com/example/test-lib/XXX nel repository.

Nel mio programma di test, ho il seguente:

scalaVersion := "2.11.0", 

resolvers += "Artifactory Realm" at "http://localhost:8081/artifactory/libs-snapshot-local", 

libraryDependencies += "com.example" %% "test-lib" % "0.1-SNAPSHOT" 

Quando il programma di test tenta di compilare, non è possibile risolvere com.example, per i seguenti motivi:

[warn] ==== Artifactory Realm: tried 
[warn] http://localhost:8081/artifactory/libs-snapshot-local/com/example/test-lib_2.11/0.1-SNAPSHOT/test-lib_2.11-0.1-SNAPSHOT.pom 

Guardando il repository directory stessa, sto ottenendo un timestamp aggiuntivo sui miei file pom:

test-lib_2.11-0.1-20140510.183027-1.pom    10-May-2014 19:30 793 bytes 
test-lib_2.11-0.1-20140510.183027-2.pom    10-May-2014 19:30 793 bytes 
... 
test-lib_2.11-0.1-20140510.183121-9.pom    10-May-2014 19:31 793 bytes 

maven-metadata.xml nella directory fa riferimento a questi ok, sbt sta cercando direttamente un file pom senza un timestamp e non riesce a trovarlo. I file pom contengono le informazioni corrette.

Cosa sto sbagliando?

+2

Sta cercando 'my-repo' come un repository di stile edera, ma è stato definito correttamente nel campione come un repository di stile maven. Comunque, il tuo output dice 'my-repo' e il tuo esempio dice' Realtà Artificiale ', quindi hai modificato qualcosa quando hai postato questo. Possiamo vedere l'originale in modo da sapere da dove viene chiamato 'my-repo'. – monkjack

+0

Buona cattura! Stavo scherzando con edera e repository maven in precedenza e devo averlo copiato dalla finestra della console sbagliata ... In realtà capisco il problema di più e aggiusterò la mia domanda per riflettere questo, un momento. – mseddon

+0

Prova ad aggiungere publishMavenStyle: = true al tuo build.sbt che potrebbe rimuovere i timestamp quando pubblichi. – monkjack

risposta

4

Il problema non era con la mia configurazione di sbt dopo tutto, ma con il mio server di repository.

Sto utilizzando Artifactory e il repository di istantanee è stato configurato in modo da utilizzare "snapshot unici" per impostazione predefinita. I nomi di file di queste istantanee vengono modificati man mano che vengono pubblicati per includere un timestamp, che sbt 13.x non sembra capire.

Dopo aver modificato il "Maven Snapshot Version Behaviour" del repository da "Unico" a "Non univoco", tutto ha iniziato a funzionare.

Problemi correlati