【问题标题】:How to pin the version of a SNAPSHOT dependency in an Ammonite script如何在 Ammonite 脚本中固定 SNAPSHOT 依赖项的版本
【发布时间】:2019-08-11 03:26:43
【问题描述】:

Ammonite 可以从 Maven 存储库下载依赖项。

我正在使用 SNAPSHOT 依赖项,并且我想始终使用缓存版本,以避免使用可能未经测试的较新版本。这可能吗?

我知道 Ammonite 最近使用 Coursier 和 Ivy,所以我发现的一些信息可能已经过时了。

我的一些想法是将当前的 SNAPSHOT 版本安装在另一个名称的本地存储库中。

【问题讨论】:

    标签: scala ammonite coursier


    【解决方案1】:

    这样做与依赖管理系统的设计相冲突,可能是个坏主意,但可以做到。有几种方法,具体取决于您的情况。

    如果您可以控制存储库,或者是部署工件的人,则可以打开“唯一快照版本”功能,这将为您提供所需的准确信息。 (看看http://maven.apache.org/pom.html#Repository

    如果您不是部署人员,并且无法控制存储库,那么是的,我怀疑复制工件的特定版本(可能具有唯一名称、版本或分类器)可能是您的最佳选择.

    警告:话虽如此,这似乎是个坏主意 - SNAPSHOT 版本应该是通过了所有测试的最新和最好的版本,不应将其视为永远不会更改的已发布版本。似乎如果你想要一个不会改变的版本,你不应该使用 SNAPSHOT。但只有您知道您的用例。

    【讨论】:

      【解决方案2】:

      @jwismar,我同意应避免使用快照版本。

      但如果你必须使用它,我是这样做的:

      export COURSIER_TTL=inf
      myscript.sc
      

      COURSIER_TTL environment variable 控制快照的保存时间。默认为 24​​ 小时。

      这样,缓存的版本就会一直被使用。

      更新:但是有一个bug,阻止它工作。

      【讨论】:

        【解决方案3】:

        使用以下目录结构创建一个本地 .ivy2/local 存储库:

        organization/moduleId/version/ivys
                                      jars
                                      poms
        

        ivys 目录中创建一个新的ivy.xml,如下所示:

        <?xml version="1.0" encoding="UTF-8"?>
        <ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
            <info organisation="myorg" module="mymod" revision="someVersion" status="integration" e:scalaVersion="2.12" e:sbtVersion="0.13">
                <description>
                my module
                </description>
            </info>
            <configurations>
                <conf name="compile" visibility="public" description=""/>
                <conf name="runtime" visibility="public" description="" extends="compile"/>
                <conf name="test" visibility="public" description="" extends="runtime"/>
                <conf name="provided" visibility="public" description=""/>
                <conf name="optional" visibility="public" description=""/>
                <conf name="sources" visibility="public" description=""/>
                <conf name="docs" visibility="public" description=""/>
                <conf name="pom" visibility="public" description=""/>
            </configurations>
            <publications>
                <artifact name="sikulix2tigervnc" type="pom" ext="pom" conf="pom"/>
                <artifact name="sikulix2tigervnc" type="jar" ext="jar" conf="compile"/>
            </publications>
            <dependencies>
            </dependencies>
        </ivy-module>
        

        将具有正确名称的*.jar 放入jars 目录,将poms 放入*.pom

        问题是 Coursier 不会下载传递依赖,所以添加额外的import $ivy.....

        【讨论】:

          猜你喜欢
          • 2019-12-24
          • 1970-01-01
          • 1970-01-01
          • 2012-01-03
          • 2022-08-03
          • 2015-04-15
          • 1970-01-01
          • 2017-09-12
          • 2016-07-29
          相关资源
          最近更新 更多