【问题标题】:How do I migrate an Artifactory repo to a shared filesystem repo?如何将 Artifactory 存储库迁移到共享文件系统存储库?
【发布时间】:2013-09-13 13:12:57
【问题描述】:

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

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

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

我想我想导出的是remote-repos 虚拟存储库,但在导出页面上没有这个选项可供选择。

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

【问题讨论】:

  • 就像经常发生的那样,在我提交这个之后,我有一个头脑风暴。如果我让 SBT 将我的项目的所有依赖项复制到我的 ~/.ivy2/cache 中,我是否可以将内容复制到一个目录并将其标记为我的共享文件系统存储库?

标签: sbt ivy artifactory


【解决方案1】:

改变常春藤家

使用${SBT_OPTS} 定义您的sbt 脚本:

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"

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

【讨论】:

  • 如果 ivy 主目录是共享网络目录,这会导致锁定问题吗?
  • 由于多个项目可以在一台机器上共享 ivy home,我希望没问题。
【解决方案2】:

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

【讨论】:

  • 任何 Artifactory 本地或缓存存储库都可以安装为安全的 WebDAV 共享,并可以通过引用目标存储库的 URL 从任何支持 WebDAV 的文件管理器进行浏览。
  • 哦哦!这是有希望的。当然,这意味着我必须弄清楚 davfs2 是如何工作的。 (叹气)让我明天在学校试一试,这可能就是成功的答案。
  • 如果在 Linux 上,您真的不需要,请参阅 github.com/jhermann/artifactory-debian/blob/master/indexing/…(并阅读项目自述文件)。
  • 仍然没有机会完成这项工作,但它仍在待办事项列表中。当我弄清楚时会告诉你(并检查答案)。
【解决方案3】:

非托管依赖

有什么办法可以让你脱离常春藤?

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

> 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 或其他名称的目录并将上述所有jar 复制到其中,scala-library.jar 除外。

接下来,复制您的构建并将libraryDependency 替换为以下内容:

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

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

【讨论】:

  • 我在这里有一条评论,解释说这种方法的唯一问题是它在实验室中有效,但不能转移到家里。使用 /etc/sbt/sbtopts,我可以覆盖实验室帐户的 repo 解析,但仍然允许学生从他们家用机器上的 repos 下载。我不知道评论去了哪里,或者我只是在做梦。
  • 您能否更新问题以包含该要求?您不希望 Ivy 缓存在终端会话中重复,但希望构建文件在您的环境之外可用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
相关资源
最近更新 更多