#scala #ammonite #coursier
#scala #ammonite #coursier
Вопрос:
Ammonite может загружать зависимости из репозиториев Maven.
Я использую зависимость от МОМЕНТАЛЬНОГО снимка, и я хотел бы всегда использовать кэшированную версию, чтобы избежать использования возможных непроверенных новых версий. Возможно ли это?
Я знаю, что Ammonite использует в последнее время Coursier и до Ivy, поэтому некоторая информация, которую я нашел, возможно, устарела.
У меня есть несколько идей установить текущую версию МОМЕНТАЛЬНОГО СНИМКА в локальный репозиторий с другим именем.
Ответ №1:
Выполнение этого противоречит дизайну систем управления зависимостями и может быть плохой идеей, но это можно сделать. Есть несколько методов, в зависимости от вашей ситуации.
Если у вас есть контроль над репозиторием или вы являетесь лицом, развертывающим артефакт, вы можете включить функцию «уникальные версии моментальных снимков», которая даст вам именно то, что вы ищете. (Взгляните на http://maven.apache.org/pom.html#Repository )
Если вы не являетесь тем, кто развертывает, и не имеете контроля над репозиторием, то да, я подозреваю, что копирование определенной версии артефакта, возможно, с уникальным именем, версией или классификатором, может быть вашим лучшим вариантом.
Предостережение: При всем сказанном это кажется плохой идеей — предполагается, что версия МОМЕНТАЛЬНОГО СНИМКА должна быть последней и лучшей, прошедшей все тесты, и ее не следует рассматривать как выпущенную версию, которая никогда не меняется. Похоже, что если вам нужна версия, которая не собирается меняться, вам не следует использовать SNAPSHOT. Но только вы знаете свой вариант использования.
Ответ №2:
Создайте локальный .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:
@jwismar, я согласен, что следует избегать работы с версиями моментальных снимков.
Но на случай, если вам придется это использовать, вот как я это делаю:
export COURSIER_TTL=inf
myscript.sc
Переменная среды COURSIER_TTL определяет, как долго хранятся моментальные снимки. По умолчанию — 24 часа.
Таким образом, всегда будет использоваться кэшированная версия.
ОБНОВЛЕНИЕ: Но есть ошибка, которая мешает ему работать.