2012-07-25 14 views
14

Estoy configurando mi primera aplicación de reproducción en un entorno de compilación mixta. Mi compañía usa maven para todo (hasta ahora) y estoy tratando de hacer que mi aplicación de juegos interactúe muy bien con el resto de mis artefactos.Dependencias de Play 2.0 y SNAPSHOT

¿Hay alguna manera de obtener hiedra/sbt/play para tratar SNAPSHOTs de manera similar a maven, es decir, actualizarlos siempre desde el repositorio remoto (por ejemplo, en un trabajador de construcción) o usar el local. m2 repository hasta que la dependencia 'expire' y luego actualizarlo desde el servidor.

He declarado una dependencia SNAPSHOT en mi Build.scala para un artefacto, y me gustaría que las actualizaciones locales a esta dependencia sean visibles para mi proyecto de juego. En el lado experto, hago lo siguiente

mvn clean install 

la que (por supuesto) construye e instala mi artefacto externo a mi repositorio Maven local (en ~/.m2/repositorio). Me gustaría que estos cambios sean inmediatamente visibles para mi proyecto de juego, pero no puedo encontrar la manera de decirle a sbt/play que no guarde en la memoria caché SNAPSHOT. No importa lo que haga, esta dependencia nunca se actualiza en el juego: tengo que ir al caché de ivy play real y eliminar la dependencia a mano para que se recojan los cambios. Idealmente, me gustaría que sbt/ivy simplemente resolviera el camino a mi repositorio maven local y no lo almacenara en caché internamente. Tengo el siguiente en mi Build.scala

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

Cuando ejecuto una acumulación en el juego, correctamente utiliza esta cesión temporal, pero luego almacena los resultados en la memoria caché de hiedra. ¿Hay algún conjuro que le indique a Ivy/sbt que no haga esto? Tal vez algo en ivysettings.xml?

+0

¿Has intentado jugar limpio? –

+0

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

+1

Sí, he probado todas las combinaciones que se me ocurren. Una instalación de vanilla 2.0 instala en la caché SNAPSHOTS y debe eliminarla manualmente. El uso de sbt 0.11 (sin play instalado) hace lo mismo. Además, el uso de sbt 0.12 con la última versión de Play 2.1 SNAPSHOT también lo muestra. No importa lo que haga, SNAPSHOT se almacena en caché en ~/.ivy2/cache y ninguna forma de encantamiento sbt/play puede hacer que sbt/play actualice esta INSTANTÁNEO en el caché de hiedra. – dpratt

Respuesta

1

Se puede utilizar:

  • play reload // cargar el archivo de aplicación actual de construcción
  • play update dependencias

// aplicación de actualización antes de la construcción de su aplicación. No sé si puede configurar sbt para no almacenar en caché las dependencias SNAPSHOT, pero puede crear un script para su proceso de compilación para forzar la recarga de dependencias.

5

@kheraud -> limpia/recarga/actualización -> no funcionará SBT almacena en caché que necesitas cigarros y no puedes volver a intentarlo de nuevo instantánea en el experto local de

@dprat -> He estado buscando una solución en Web y no han encontrado nada más :( me di por vencido - acaba de eliminar el paquete local en caché de hiedra y qué play update puede simplificar y hacer un guión

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

en otros lugares que he visto este atribuído a Defecto SBT https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

Una solución parece ser usar Nexus. Tendrás que implementar desde maven a nexus. Tendrá que usar la ruta nexus en lugar de mvn. ¡Tendrás que instalar y ejecutar nexus!

Para instalar nexus, vaya a sonatype y descargue. Mire los permisos de archivos (lea las instrucciones) pero es simple. Deberá poner las credenciales en ~/.m2/settings.xml. El valor predeterminado es admin, admin123.

<settings> 
    <servers> 
    <server> 
     <id>snapshots</id> 
     <username>admin</username> 
     <password>admin123</password> 
    </server> 
    </servers> 
</settings> 

Se da el despliegue experto a usted por nexo, por ejemplo,:

<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> 

Entonces mvn deploy pondrá sus recursos allí.

Luego, en el uso de juegos SBT

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

Todavía es necesario detener el juego, utiliza Actualización de juego, y reiniciar el juego.

0

No estoy seguro de cómo funciona esto, pero "otro tipo me dijo" - sí, ese es el alcance de mis referencias para esto - que la limpieza de la carpeta "repositorio" en la instalación de reproducción podría ayudar.

Tengo un pequeño script "refresh.sh" que hace esto:

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

Parece que funciona para mí. Donde "/ opt/play" es donde tiene su instalación de reproducción y "com.mycompany" es lo que necesita para actualizar.

No estoy diciendo que esto sea correcto, pero podría valer la pena si nada funciona.

0

A partir de la versión sbt 0.13.6 (agosto de 2014), se puede usar la configuración de configuración marcar updateOptions en Build.scala/build.sbt, para controlar la resolución SNAPSHOT.

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

Documentación sobre esta nueva característica es here

correspondiente pull request en github para más detalles.

Cuestiones relacionadas