如何在 Ammonite 脚本中固定 SNAPSHOT 依赖项的版本
How to pin the version of a SNAPSHOT dependency in an Ammonite script
Ammonite 可以从 Maven 存储库下载依赖项。
我正在使用 SNAPSHOT 依赖项,我想始终使用缓存版本,以避免使用可能未经测试的较新版本。这可能吗?
我知道 Ammonite 最近使用 Coursier 而在 Ivy 之前使用,所以我发现的一些信息可能已经过时了。
我的一些想法是在本地存储库中使用另一个名称安装当前的 SNAPSHOT 版本。
这样做与依赖管理系统的设计有冲突,可能不是一个好主意,但可以做到。有几种方法,具体取决于您的情况。
如果您拥有存储库的控制权,或者是部署工件的人,则可以打开 "unique snapshot versions" 功能,这将为您提供您正在寻找的内容。 (看看http://maven.apache.org/pom.html#Repository)
如果您不是部署者,并且无法控制存储库,那么是的,我怀疑复制工件的特定版本,可能具有唯一的名称、版本或分类器,可能是您的最佳选择。
警告:综上所述,这似乎是个坏主意 -- SNAPSHOT 版本应该是通过所有测试的最新和最好的版本,不应被视为永不更改的已发布版本.看起来如果你想要一个不会改变的版本,你不应该使用 SNAPSHOT。但只有你知道你的用例。
@jwismar,我同意应避免使用快照版本。
但如果你必须使用它,我是这样做的:
export COURSIER_TTL=inf
myscript.sc
COURSIER_TTL environment variable 控制快照的保留时间。默认情况下,24 小时。
这样缓存的版本就会一直被使用
更新:但是有一个 bug 阻止它工作。
创建具有以下目录结构的本地 .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>
在 jars
目录中放置具有正确名称的 *.jar
并在 poms
中放置 *.pom
.
问题是 Coursier 不会下载传递依赖,所以添加额外的 import $ivy.....
Ammonite 可以从 Maven 存储库下载依赖项。
我正在使用 SNAPSHOT 依赖项,我想始终使用缓存版本,以避免使用可能未经测试的较新版本。这可能吗?
我知道 Ammonite 最近使用 Coursier 而在 Ivy 之前使用,所以我发现的一些信息可能已经过时了。
我的一些想法是在本地存储库中使用另一个名称安装当前的 SNAPSHOT 版本。
这样做与依赖管理系统的设计有冲突,可能不是一个好主意,但可以做到。有几种方法,具体取决于您的情况。
如果您拥有存储库的控制权,或者是部署工件的人,则可以打开 "unique snapshot versions" 功能,这将为您提供您正在寻找的内容。 (看看http://maven.apache.org/pom.html#Repository)
如果您不是部署者,并且无法控制存储库,那么是的,我怀疑复制工件的特定版本,可能具有唯一的名称、版本或分类器,可能是您的最佳选择。
警告:综上所述,这似乎是个坏主意 -- SNAPSHOT 版本应该是通过所有测试的最新和最好的版本,不应被视为永不更改的已发布版本.看起来如果你想要一个不会改变的版本,你不应该使用 SNAPSHOT。但只有你知道你的用例。
@jwismar,我同意应避免使用快照版本。
但如果你必须使用它,我是这样做的:
export COURSIER_TTL=inf
myscript.sc
COURSIER_TTL environment variable 控制快照的保留时间。默认情况下,24 小时。
这样缓存的版本就会一直被使用
更新:但是有一个 bug 阻止它工作。
创建具有以下目录结构的本地 .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>
在 jars
目录中放置具有正确名称的 *.jar
并在 poms
中放置 *.pom
.
问题是 Coursier 不会下载传递依赖,所以添加额外的 import $ivy.....