1

我使用 Scala 教授高中计算机科学,并且我设法建立了一个 Artifactory 存储库,这样当我的学生下载依赖项时,我们大部分的下载都是在实验室内完成的,而不是通过互联网。

但是,我们所有的主文件夹都在网络驱动器上,学生使用的终端没有自己的硬盘,因此拥有数十个相同依赖项的副本似乎很愚蠢。不幸的是,即使使用 Artifactory 存储库,SBT/Ivy 也会将所有工件复制到每个用户的 ~/.ivy2/cache 目录中。

我听说,如果我设置了共享文件系统存储库,那么工件将不会被复制。我不知道如何以一种可以识别为文件系统存储库的格式导出 Artifactory 为我缓存的所有工件。(导出通常会将每个远程存储库放在一个单独的文件夹中,我想我必须以某种方式统一,但我不完全确定如何做到这一点。如果这是最简单的事情,请仔细解释。)

我想我想导出的是remote-repos虚拟存储库,但这在导出页面上不能作为选择。

另一个棘手的部分是相同的构建文件应该可以在家中使用,那里没有代理存储库,所以我依赖于我可以/etc/sbt/sbtopts用来覆盖实验室环境中的存储库解析的事实。

4

3 回答 3

1

改变常春藤家

定义你的sbt脚本${SBT_OPTS}

exec java -Xmx1512M -XX:MaxPermSize=512M ${SBT_OPTS} -jar /etc/sbt/sbt-launch-0.13.0.jar "$@"

然后仅在您的网络环境中设置SBT_OPTS为:

$ export SBT_OPTS="-Dsbt.ivy.home=/etc/sbt/repository"

学生可能需要对目录的写入权限。

于 2013-09-18T04:22:15.883 回答
0

您还可以davfs2在 Linux 上使用或在 Windows 上使用“网络文件夹”来简单地将 Artifactory 挂载为 WebDAV 资源(只读)。这避免了通过本地文件系统进行的任何间接操作,并使此类副本保持最新。

于 2013-09-10T19:52:41.667 回答
0

非托管依赖

一个能让你脱离常春藤的解决方案怎么样?

在使用托管依赖项的原始构建中,运行

> show full-classpath

这应该显示如下内容:

[info]  List(Attributed(/home/foo/helloworld/target/scala-2.10/classes), Attributed(/home/foo/.ivy2/cache/com.eed3si9n/treehugger_2.10/jars/treehugger_2.10-0.3.0.jar), Attributed(/foo/.sbt/0.13.0/boot/scala-2.10.2/lib/scala-library.jar), Attributed(/home/foo/.ivy2/cache/com.github.scopt/scopt_2.10/jars/scopt_2.10-3.0.0.jar))

创建一个名为/shared/project1/libor 的目录并将上述所有 jar 复制到其中,除了scala-library.jar.

接下来,制作您的构建副本并替换libraryDependency为以下内容:

unmanagedBase := file("/shared/project1/lib")

您仍然应该能够编译代码。

于 2013-09-11T07:40:32.987 回答