Как закрепить версию зависимости SNAPSHOT в скрипте Ammonite - PullRequest
0 голосов
/ 20 марта 2019

Ammonite может загружать зависимости из репозиториев Maven.

Я использую зависимость SNAPSHOT, и я хотел бы всегда использовать кэшированную версию, чтобы избежать использования возможных непроверенных более новых версий.Возможно ли это?

Я знаю, что в последнее время Ammonite использует Coursier и до Ivy, поэтому некоторая информация, которую я нашел, может быть устаревшей.

У меня есть некоторые идеи по установке текущей версии SNAPSHOT.в локальном хранилище с другим именем.

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Это противоречит дизайну систем управления зависимостями и может быть плохой идеей, но это может быть сделано. В зависимости от вашей ситуации есть несколько способов.

Если у вас есть контроль над хранилищем или вы развертываете артефакт, вы можете включить функцию «уникальные версии снимков», которая даст вам именно то, что вы ищете. (Взгляните на http://maven.apache.org/pom.html#Repository)

Если вы не тот, кто развертывает и не имеет контроля над репо, то да, я подозреваю, что лучшим вариантом может быть копирование определенной версии артефакта, возможно, с уникальным именем, версией или классификатором. .

Предостережение: С учетом всего вышесказанного это кажется плохой идеей - версия SNAPSHOT должна быть последней и самой лучшей, прошедшей все тесты, и не должна рассматриваться как выпущенная версия, которая никогда не меняется. Кажется, что если вы хотите версию, которая не будет меняться, вам не следует использовать SNAPSHOT. Но только вы знаете свой вариант использования.

0 голосов
/ 28 марта 2019

Создать локальный .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.....

0 голосов
/ 21 марта 2019

@ jwismar, я согласен, что работы с версиями моментальных снимков следует избегать.

Но в случае, если вам придется использовать его, вот как я это делаю:

export COURSIER_TTL=inf
myscript.sc

Переменная окружения * COURSIER_TTL определяет продолжительность хранения снимков.По умолчанию 24 часа.

Таким образом, кэшированная версия всегда будет использоваться.

ОБНОВЛЕНИЕ : Но есть ошибка ,что мешает ему работать.

...