如何配置Typesafe Activator不使用用户主页?

时间:2014-06-13 07:30:15

标签: sbt typesafe-activator

我想配置Typesafe Activator及其捆绑工具,不使用我的用户主目录 - 我的意思是~/.activator(配置?),~/.sbt(sbt配置? ),尤其是~/.ivy2,我想在我的两个操作系统之间分享。 Typesafe"文档"没什么帮助。

请为Windows和Linux提供帮助。

4 个答案:

答案 0 :(得分:8)

来自sbt的官方文档中的Command Line Options

  • sbt.global.base - 包含全局设置和插件的目录(默认值:~/.sbt/0.13
  • sbt.ivy.home - 包含本地Ivy存储库和工件缓存的目录(默认值:~/.ivy2

似乎~/.activator已在启动脚本中设置并使用,并且我将更改该值。

sbt/sbt.boot.properties中的activator-launch-1.2.1.jar)也显示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}

这意味着如果没有一些开发,只能改变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

如果您想深入了解,可以使用consoleProject命令查询sbt和Ivy的主目录的当前值(假设您使用activator启动了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 您真的要说服Activator使用sbt.ivy.home,您必须更改sbt/sbt.boot.properties中的activator-launch-1.2.2.jar。只需按照以下步骤操作:

  1. sbt/sbt.boot.properties解包activator-launch-1.2.2.jar

    jar -xvf activator-launch-1.2.2.jar sbt/sbt.boot.properties
    
  2. 修改sbt/sbt.boot.properties并替换ivy-home下的[ivy]

    ivy-home: ${sbt.ivy.home-${user.home}/.ivy2}
    
  3. 将更改后的sbt/sbt.boot.properties添加到activator-launch-1.2.2.jar

    jar -uvf activator-launch-1.2.2.jar sbt/sbt.boot.properties
    
  4. 通过更改,-Dsbt.ivy.home=./ivy2可以正常工作。

    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
    

答案 1 :(得分:3)

我今天正在试验这个。过了一会儿,在我看来这可能是最好的事情:

<强>窗:

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

<强> Linux的:

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

然后,您应该选择任何想要在主目录中存储数据的Java程序。

答案 2 :(得分:1)

作为Jacek的答案的补充,另一种设置.ivy2目录的方法是使用sbt ivyConfiguration任务。它返回与常春藤相关的配置设置,包括常春藤主页的路径(默认为~/.ivy2的路径)。

只需将这几行添加到项目中的build.sbt文件中:

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

它返回一个与原始配置相同的新常春藤配置,但是有正确的路径到常春藤主目录(这里是./.ivy2,所以它将位于build.sbt的旁边文件)。这样,当sbt使用ivyConfiguration任务获取常春藤配置时,.ivy2目录的路径将是上面设置的路径。

使用sbt 0.13.50.13.8对我有用。

注意:对于sbt版本0.13.6及更高版本,InlineIvyConfiguration的构造需要一个额外的参数,以避免被标记为已弃用,因此您可能希望更改最后一行:

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

(请注意额外的config.updateOptions

答案 3 :(得分:-1)

我在Mac上遇到同样的问题。我删除了名为.activator的用户主目录和所有相关文件夹中的目录。之后在终端上运行activator run命令。 Activator下载我删除的所有文件夹。比问题解决了。