代码之家  ›  专栏  ›  技术社区  ›  david.perez

如何在Ammonite脚本中固定快照依赖项的版本

  •  0
  • david.perez  · 技术社区  · 7 年前

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

    我正在使用快照依赖项,我希望始终使用缓存的版本,以避免使用可能未经测试的较新版本。这可能吗?

    我知道菊石在常春藤之前用得比较快,所以我发现有些信息可能已经过时了。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   jwismar    7 年前

    这样做与依赖管理系统的设计相冲突,可能是一个坏主意,但它是可以做到的。根据你的情况,有几种方法。

    如果您拥有对存储库的控制权,或者是部署工件的人,那么您可以打开“唯一快照版本”功能,这将为您提供您所需要的内容。(看看 http://maven.apache.org/pom.html#Repository )

    如果您不是部署者,并且没有repo的控制权,那么是的,我怀疑复制工件的特定版本(可能具有唯一的名称、版本或分类器)可能是您的最佳选择。

    警告:尽管如此,这似乎是个坏主意——快照版本应该是最新的、最棒的版本,通过了所有的测试,不应该被视为一个从未改变的发布版本。似乎如果你想要一个不会改变的版本,你不应该使用快照。但是只有你知道你的用例。

        2
  •  0
  •   david.perez    7 年前

    创建本地 .ivy2/local 具有以下目录结构的存储库:

    organization/moduleId/version/ivys
                                  jars
                                  poms
    

    新建 ivy.xml 里面 ivys 这样的目录:

    <?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>
    

    放置在 jars 目录 *.jar 用正名和 poms 这个 *.pom .

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

        3
  •  0
  •   david.perez    7 年前

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

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

    export COURSIER_TTL=inf
    myscript.sc
    

    COURSIER_TTL environment variable 控制快照的保存时间。默认情况下,24小时。

    这样,将始终使用缓存的版本。

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

    推荐文章