2012-07-25 16 views
14

Ich richte meine erste Play-App in einer gemischten Build-Umgebung ein. Meine Firma benutzt Maven für alles (bis jetzt) ​​und ich versuche, meine Play App gut mit den anderen Artefakten zu interagieren.2.0 und SNAPSHOT-Abhängigkeiten spielen

Gibt es eine Möglichkeit, efeu/sbt/play mit SNAPSHOTs in ähnlicher Weise wie Maven zu behandeln - entweder aktualisieren sie sie immer aus dem Remote-Repository (zum Beispiel auf einem Build-Worker) oder verwenden Sie die lokale. m2-Repository, bis die Abhängigkeit abläuft, und aktualisiert sie dann vom Server.

Ich habe eine SNAPSHOT-Abhängigkeit in meinem Build.scala für ein Artefakt deklariert, und ich möchte, dass lokale Updates für diese Abhängigkeit in meinem Spielprojekt sichtbar sind. Auf der Maven-Seite, kann ich die folgenden

mvn clean install 

, die (natürlich) baut und installiert meinen externen Artefakt zu meinem lokalen Maven-Repository (bei ~/.m2/Repository). Ich möchte, dass diese Änderungen für mein Spielprojekt sofort sichtbar sind, aber ich kann nicht herausfinden, wie ich sbt/play sagen kann, dass SNAPSHOTs nicht zwischengespeichert werden. Egal, was ich mache, diese Abhängigkeit wird nie im Spiel aufgefrischt - ich muss in den eigentlichen Play-Efeu-Cache gehen und die Abhängigkeit per Hand löschen, um alle Änderungen abzuholen. Idealerweise möchte ich, dass sbt/ivy den Pfad zu meinem lokalen maven-Repo auflöst und ihn nicht intern zwischenspeichert. Ich habe folgendes in meinem Build.scala bekam

val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository", 
    testOptions in Test := Nil 
) 

Wenn ich einen Build im Spiel laufen, verwendet es richtig dieses Repo, aber dann speichert die Ergebnisse in der Efeu-Cache. Gibt es eine Beschwörung, kann ich Ivy/sbt sagen, dies nicht zu tun? Vielleicht etwas in ivysettings.xml?

+0

Haben Sie versucht, sauber zu spielen? –

+0

Unterstützt http://stackoverflow.com/questions/8224907/re-download-a-snapshot-version-of-a-dependency-using-sbt? –

+1

Ja - ich habe jede denkbare Kombination ausprobiert. Eine Vanilla Play 2.0-Installation speichert SNAPSHOTS und Sie müssen sie manuell löschen. Die Verwendung von sbt 0.11 (ohne installierte Wiedergabe) macht dasselbe. Die Verwendung von sbt 0.12 mit dem neuesten Play 2.1 SNAPSHOT zeigt dies ebenfalls. Egal was ich mache, der SNAPSHOT wird in ~/.ivy2/cache gepuffert und keine Art von sbt/play Beschwörung kann sbt/play veranlassen diesen SNAPSHOT im Efeu Cache zu aktualisieren. – dpratt

Antwort

1

können Sie verwenden:

  • play reload // die aktuelle Anwendung Build-Datei Abhängigkeiten
  • play update // Update-Anwendung neu laden

vor Ihrer Anwendung erstellen. Ich weiß nicht, ob Sie sbt so konfigurieren können, dass die SNAPSHOT-Abhängigkeiten nicht zwischengespeichert werden, aber Sie können Ihren Build-Prozess skripten, um das erneute Laden von Abhängigkeiten zu erzwingen.

5

@kheraud -> sauber/Reload/update -> wird sbt nicht funktioniert es localy Caches und prüft nicht wieder für neue Snapshot in lokalen Maven

@dprat -> Ich habe Lösung in Web gesucht und habe nichts mehr :(gefunden habe ich aufgegeben - nur Ihr lokales Paket im Efeu-Cache löschen und Sie play update Sie können es vereinfachen und ein Skript

rm -rf ~/.ivy2/cache/your.package.foo 
play update compile 
2

an anderer Stelle habe ich diese zugeschriebenen eine gesehen SBT Defekt https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

Eine Lösung scheint Nexus zu verwenden. Sie müssen von Maven zu Nexus bereitstellen. Sie müssen den Nexus-Pfad anstelle von MVN verwenden. Sie müssen nexus installieren und ausführen!

Um Nexus zu installieren gehen Sie zu Sonatype und laden Sie. Watch Dateiberechtigungen (lesen Sie die Anweisungen), aber es ist einfach. Sie müssen die Anmeldeinformationen in ~/.m2/settings.xml speichern. Standard ist admin, admin123.

Die Maven Deploy wird Ihnen von Nexus, z.:

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

Dann mvn deploy wird es Ihre Ressource setzen.

dann im Spiel sbt Verwendung

resolvers += "Local Nexus Repository" at "http://0.0.0.0:8081/nexus/content/repositories/snapshots" 

Sie müssen noch spielen, verwenden Play-Update stoppen und das Spiel neu starten.

0

Ich bin nicht sicher, wie das funktioniert, aber "ein anderer Kerl sagte mir" - ja, das ist der Umfang meiner Verweise dafür - dass die Reinigung des "Repository" -Ordners in der Play-Installation helfen könnte.

Ich habe ein wenig „refresh.sh“ Skript, das dies tut:

rm -rf /opt/play/repository/cache/com.mycompany 
play clean 
play update 
play run 

Es scheint für mich zu arbeiten. Wo "/ opt/play" ist, wo Sie Ihre Play-Installation haben und "com.mycompany" ist, was Sie aktualisieren müssen.

Ich sage nicht, dass das richtig ist, aber es könnte sich sehen lassen, wenn nichts anderes funktioniert.

0

Ab der sbt-Version 0.13.6 (Aug 2014) kann das Build-Setting-Flag updateOptions in Build.scala/build.sbt zur Steuerung der SNAPSHOT-Auflösung verwendet werden.

updateOptions := updateOptions.value.withLatestSnapshots(false/true) 

Dokumentation zu dieser neuen Funktion ist here

pull request auf Github Einzelheiten entspricht.

Verwandte Themen