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

时间:2019-03-20 12:22:58

标签: scala ammonite coursier

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

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

我知道Ammonite最近使用Coursier并在Ivy之前使用,所以我发现的一些信息可能已过时。

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

3 个答案:

答案 0 :(得分:1)

执行此操作与依赖项管理系统的设计有冲突,这可能不是一个好主意,但是可以做到。有两种方法,具体取决于您的情况。

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

如果您不是正在部署的人,并且没有对存储库的控制权,那么是的,我怀疑复制工件的特定版本(可能具有唯一的名称,版本或分类符)可能是您的最佳选择

注意事项:话虽这么说,这似乎是一个坏主意-SNAPSHOT版本应该是通过所有测试的最新,最大版本,不应将其视为从未更改的发行版本。似乎,如果您想要一个不会更改的版本,则不应该使用SNAPSHOT。但是只有您知道用例。

答案 1 :(得分:0)

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

但是如果您必须使用它,请按以下步骤操作:

export COURSIER_TTL=inf
myscript.sc

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

通过这种方式,将始终使用缓存的版本。

更新:但是有一个bug,使它无法正常工作。

答案 2 :(得分:0)

使用以下目录结构创建本地.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.....