2014-06-13 14 views
9

Mi piacerebbe configurare Typesafe Activator e gli strumenti in bundle non utilizzano la mia home directory utente - intendo (configurazione?), ~/.sbt (configurazione sbt?) E in particolare ~/.ivy2, che vorrei condividere tra i miei due sistemi operativi. La "documentazione" typesafe è di scarso aiuto.Come configurare Typesafe Activator per non utilizzare l'utente home?

Hai bisogno di aiuto per Windows e Linux, per favore.

+0

Finora ho cercato di scavare lo script di avvio (activator.bat su Windows) ma fa riferimento solo a '' '% UserProfile%' '' per '' 'CFG_FILE_HOME''' e' '' CFG_FILE_VERSION''', e anche cambiando ciò non ha alcun effetto su dove viene creata la directory ''. .activator'''. – enlait

risposta

8

Da Command Line Options nella documentazione ufficiale di SBT:

  • sbt.global.base - L'elenco contiene le impostazioni globali e plugin (default: ~/.sbt/0.13)
  • sbt.ivy.home - La directory contenente il repository Ivy e la cache manufatto locale (di default : ~/.ivy2)

Sembra che ~/.activator sia impostato e utilizzato negli script di avvio e è lì che cambierei il valore.

appare anche (in sbt/sbt.boot.properties in activator-launch-1.2.1.jar) che il valore di ivy-home è ${user.home}/.ivy2:

[ivy] 
    ivy-home: ${user.home}/.ivy2 
    checksums: ${sbt.checksums-sha1,md5} 
    override-build-repos: ${sbt.override.build.repos-false} 
    repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories} 

Ciò significa che senza un certo sviluppo è possibile solo cambiare sbt.global.base.

➜ minimal-scala activator -Dsbt.global.base=./sbt -Dsbt.ivy.home=./ivy2 about 
[info] Loading project definition from /Users/jacek/sandbox/sbt-launcher/minimal-scala/project 
[info] Set current project to minimal-scala (in build file:/Users/jacek/sandbox/sbt-launcher/minimal-scala/) 
[info] This is sbt 0.13.5 
[info] The current project is {file:/Users/jacek/sandbox/sbt-launcher/minimal-scala/}minimal-scala 1.0 
[info] The current project is built against Scala 2.11.1 
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin 
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4 

Se volete vedere sotto il cofano, si potrebbe interrogare per i valori attuali delle home directory di SBT e Ivy con consoleProject di comando (si presuppone hai iniziato activator con activator -Dsbt.global.base=./sbt -Dsbt.ivy.home=./ivy2):

> consoleProject 
[info] Starting scala interpreter... 
[info] 
import sbt._ 
import Keys._ 
import _root_.sbt.plugins.IvyPlugin 
import _root_.sbt.plugins.JvmPlugin 
import _root_.sbt.plugins.CorePlugin 
import _root_.sbt.plugins.JUnitXmlReportPlugin 
import currentState._ 
import extracted._ 
import cpHelpers._ 
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_60). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> appConfiguration.eval.provider.scalaProvider.launcher.bootDirectory 
res0: java.io.File = /Users/jacek/sandbox/sbt-launcher/minimal-scala/sbt/boot 

scala> appConfiguration.eval.provider.scalaProvider.launcher.ivyHome 
res1: java.io.File = /Users/jacek/.ivy2 

Iff sei davvero in convincente attivatore per utilizzare sbt.ivy.home, devi cambiare sbt/sbt.boot.properties in activator-launch-1.2.2.jar. Basta seguire le istruzioni:

  1. Estrarre sbt/sbt.boot.properties fuori activator-launch-1.2.2.jar.

    jar -xvf activator-launch-1.2.2.jar sbt/sbt.boot.properties 
    
  2. Modifica sbt/sbt.boot.properties e sostituire ivy-home sotto [ivy].

    ivy-home: ${sbt.ivy.home-${user.home}/.ivy2} 
    
  3. aggiungere il cambiata sbt/sbt.boot.properties-activator-launch-1.2.2.jar.

    jar -uvf activator-launch-1.2.2.jar sbt/sbt.boot.properties 
    

Con il cambiamento, -Dsbt.ivy.home=./ivy2 funziona bene.

scala> appConfiguration.eval.provider.scalaProvider.launcher.bootDirectory 
res0: java.io.File = /Users/jacek/sandbox/sbt-launcher/minimal-scala/sbt/boot 

scala> appConfiguration.eval.provider.scalaProvider.launcher.ivyHome 
res1: java.io.File = /Users/jacek/sandbox/sbt-launcher/minimal-scala/ivy2 
+0

Sì, ha funzionato. Ho messo '' '-D ...' '' opzioni in '' '~/.activator/activatorconfig.txt''' - questo dovrebbe essere diverso per ogni OS comunque, poiché i percorsi sono diversi. Grazie per la spiegazione approfondita. – enlait

+0

BTW Ho segnalato questo problema al momento, ma ho dimenticato di allegare qui. Sembra essere ancora aperto https://github.com/typesafehub/activator/issues/585 – enlait

3

Oggi stavo sperimentando.Dopo un po ', mi sembra come questo potrebbe essere la cosa migliore da fare:

di Windows:

setx _JAVA_OPTIONS "-Duser.home=C:/my/preferred/home/" 

Linux:

export _JAVA_OPTIONS='-Duser.home=/local/home/me' 

allora si dovrebbe essere buona per andare per qualsiasi programma Java che vuole memorizzare i dati nella tua home directory.

+0

In caso contrario: 'export _JAVA_OPTIONS = '- Duser.home =/local/home/me''? – 030

1

In aggiunta alla risposta di Jacek, un altro modo per impostare la directory .ivy2 era di utilizzare l'attività sbt ivyConfiguration. Restituisce le impostazioni di configurazione relative all'edera, compreso il percorso per la casa dell'edera (quella che per impostazione predefinita è ~/.ivy2).

Basta aggiungere queste poche righe al file build.sbt nel progetto:

ivyConfiguration ~= { originalIvyConfiguration => 
    val config = originalIvyConfiguration.asInstanceOf[InlineIvyConfiguration] 
    val ivyHome = file("./.ivy2") 
    val ivyPaths = new IvyPaths(config.paths.baseDirectory, Some(ivyHome)) 
    new InlineIvyConfiguration(ivyPaths, config.resolvers, config.otherResolvers, 
    config.moduleConfigurations, config.localOnly, config.lock, 
    config.checksums, config.resolutionCacheDir, config.log) 
} 

Esso restituisce una nuova configurazione di edera identica a quella originale, ma con la strada giusta per l'home directory edera (qui ./.ivy2, quindi verrà posizionato proprio accanto al file build.sbt). In questo modo, quando sbt usa l'attività ivyConfiguration per ottenere la configurazione di edera, il percorso della directory .ivy2 sarà quello impostato sopra.

Ha funzionato per me utilizzando sbt 0.13.5 e 0.13.8.

Nota: per le versioni SBT 0.13.6 e, soprattutto, la costruzione del InlineIvyConfiguration ha bisogno di un ulteriore parametro per evitare di essere contrassegnato come deprecato, così si potrebbe desiderare di cambiare l'ultima riga in:

new InlineIvyConfiguration(ivyPaths, config.resolvers, config.otherResolvers, 
    config.moduleConfigurations, config.localOnly, config.lock, 
    config.checksums, config.resolutionCacheDir, config.updateOptions, config.log) 

(si noti l'ulteriore config.updateOptions)

-1

Ho avuto lo stesso problema su Mac. Ho cancellato la directory nella directory home dell'utente denominata .activator e tutta la cartella correlata. Dopo quell'attivatore di esecuzione, esegui il comando sul terminale. Activator scarica tutta la cartella che ho cancellato. Di problema risolto.

+0

Questo non risponde alla domanda, riguarda la possibilità di avere i file posizionati altrove - non come eliminarli o ripristinarli. – Jaap

Problemi correlati