如何将Artifactory仓库迁移到共享文件系统仓库?

时间:2013-09-09 23:23:10

标签: sbt ivy artifactory

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

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

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

我认为我想要导出的是remote-repos虚拟存储库,但这在导出页面上不可用。

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

3 个答案:

答案 0 :(得分: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"

学生可能需要写作权利。

答案 1 :(得分:0)

您还可以使用Linux上的davfs2或Windows上的“Web文件夹”将Artifactory简单地安装为WebDAV资源(只读)。这样可以避免通过本地文件系统进行任何间接,并使这种副本保持最新状态。

答案 2 :(得分: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/lib或其他内容的目录,然后复制上面所有的jars,scala-library.jar除外。

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

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

您仍然可以编译代码。