【问题标题】:How make sbt use my jar from my local repository?如何让 sbt 使用我本地存储库中的 jar?
【发布时间】:2017-09-01 05:34:19
【问题描述】:

我正在尝试以非常严格的安全性在我的 Linux VM(CentOS) 中安装 SBT。

无法访问

我已经解压了 SBT zip 文件并将 bin 路径添加到环境变量中。

不出所料,我无法运行 SBT。

[admin@xxx]$ sbt
Getting org.scala-sbt sbt 0.13.12 ...

:: problems summary ::
:::: WARNINGS
            module not found: org.scala-sbt#sbt;0.13.12

    ==== local: tried

      /home/admin/.ivy2/local/org.scala-sbt/sbt/0.13.12/ivys/ivy.xml

      -- artifact org.scala-sbt#sbt;0.13.12!sbt.jar:

      /home/admin/.ivy2/local/org.scala-sbt/sbt/0.13.12/jars/sbt.jar

    ==== Maven Central: tried

      https://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.12/sbt-0.13.12.pom

      -- artifact org.scala-sbt#sbt;0.13.12!sbt.jar:

      https://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.12/sbt-0.13.12.jar

    ==== typesafe-ivy-releases: tried

      https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.12/ivys/ivy.xml

    ==== sbt-ivy-snapshots: tried

      https://repo.scala-sbt.org/scalasbt/ivy-snapshots/org.scala-sbt/sbt/0.13.12/ivys/ivy.xml

            ::::::::::::::::::::::::::::::::::::::::::::::

            ::          UNRESOLVED DEPENDENCIES         ::

            ::::::::::::::::::::::::::::::::::::::::::::::

            :: org.scala-sbt#sbt;0.13.12: not found

            ::::::::::::::::::::::::::::::::::::::::::::::


:::: ERRORS
    Server access Error: Connection timed out url=https://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.12/sbt-0.13.12.pom

    Server access Error: Connection timed out url=https://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.12/sbt-0.13.12.jar

    Server access Error: Connection timed out url=https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.12/ivys/ivy.xml

    Server access Error: Connection timed out url=https://repo.scala-sbt.org/scalasbt/ivy-snapshots/org.scala-sbt/sbt/0.13.12/ivys/ivy.xml


:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.13.12: not found
Error during sbt execution: Error retrieving required libraries
(see /home/admin/.sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.13.12

我设法通过添加存储库文件使其使用我的存储库

存储库

[repositories]
  local
  my-maven-proxy-releases: http://nexuspro.company.com/nexus/service/local/repositories/

然后我用这个参数运行 SBT 命令:

sbt -Dsbt.repository.config=/sbt/conf/repositories

现在我的问题是 SBT 似乎使用了与我的存储库不同的默认目录结构。

<my repository>/org/scala-sbt/sbt/0.13.12/sbt-0.13.12.jar

所以我现在的问题是如何设置 SBT 以使用我的 jar?也许强制它使用我的 jar 的绝对路径

<my repository>/sbt-0.13.12.jar

【问题讨论】:

    标签: linux centos sbt


    【解决方案1】:

    这对没有互联网连接但需要使用 sbt 的人很有用。

    这是基于 thirstycrow 的第三个选项。

    首先,您需要在可以访问互联网的环境中更新您的 sbt。

    sbt update
    

    如果你需要某个版本的 sbt,你需要在调用 sbt update 之前编辑你的 build.properties

    然后你将你的 .ivy2\cache 复制到目标环境(没有互联网)

    然后将您的缓存设置为您的存储库

    存储库

    [repositories]
    local
    cache: file://home/admin/.ivy2/cache, [organisation]/[module]/[type]s/[module]-[revision].[type], [organisation]/[module]/ivy-[revision].xml
    

    然后调用 sbt 参数指向你的仓库文件

    sbt -Dsbt.repository.config=/sbt/conf/repositories
    

    【讨论】:

    • 举个例子怎么样?
    • 我觉得上面那个差不多了。您在没有连接问题的环境中运行 sbt update。然后你复制它的 .ivy2\cache。然后,您可以通过将其添加到存储库文件中来将其用作源(见上文)。然后最后运行 sbt,但有一个关于要使用的 repo 的参数。但我认为我仍然遇到了一些颠簸。所以最好的解决方案是拥有自己的 Nexus。
    【解决方案2】:

    这样做的正确方法是将这两个存储库代理到您公司的私有存储库。我想知道最新版本的nexus 是否增加了对代理/服务常春藤存储库的支持。如果没有,您将不得不切换到 artifactory。

    另一种方法是使用本地安装的工件代理所需的存储库,并通过 ssh 隧道将其提供给您的虚拟机。当我没有权限管理公司仓库时,我玩了这个把戏。

    如果上述想法对您不起作用。最后的机会是在可以访问所需存储库的地方构建您的项目。然后将 ~/.ivy 目录复制到您的虚拟机。这就是 ivy 存储获取的工件的地方。

    【讨论】:

    • hmm 如果我复制 ~.ivy 那么之后我不需要调用 sbt 命令?
    • 你仍然需要调用 sbt 来构建你的项目。但是现在 sbt 将不必通过网络获取依赖。
    猜你喜欢
    • 2011-04-15
    • 2016-04-17
    • 2017-04-04
    • 2018-05-23
    • 2018-02-13
    • 2014-03-01
    • 2011-12-15
    • 2012-04-07
    • 2012-10-30
    相关资源
    最近更新 更多