Groovy Grape не загружает новые версии

Я считаю, что у меня все настроено правильно, так что grape должен спрашивать репозиторий, есть ли новая ревизия, но это не так. Пока банка существует в формате .groovy / grapes, она ее использует.

Я делаю захват через Java-код через API нашего приложения, поэтому может быть некоторая предварительная обработка, которую будет не так легко обработать, если в сценарии есть @Grab, если это имеет значение ....

Map<String,Object> args = new HashMap<String, Object>();
args.put("validate", true);
args.put("classLoader", gcl);

Map<String,Object> dependencies = new HashMap<String, Object>();
dependencies.put("group", groupID);
dependencies.put("module", artifactID);
dependencies.put("version", version);
dependencies.put("force", true);
dependencies.put("changing", true);

Grape.grab(args, dependencies);

Где groupID, artifactID и version передаются из вызывающего скрипта.

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

Я пробовал не использовать grapeConfig.xml (то есть все значения по умолчанию и использовать Grape.addResolver для добавления репозиториев) и иметь grapeConfig.xml, в котором есть мои репозитории, а также эта строка, которую я собрал из другого сообщения, должна сказать это, как долго предполагать, что кеш действителен (если я не понимаю это неправильно, но в любом случае не сработал).

<property name="ivy.cache.ttl.default" value="2m"/>

Я также заметил, что если я укажу "*" для версии, grape ДЕЙСТВИТЕЛЬНО запрашивает у репозитория метаданные, но, похоже, все еще не знает, что есть более новая ревизия. Более того, как только я это сделаю, он больше не сможет найти конкретную версию. Мне нужно удалить кеш, чтобы он вернулся к работе с определенной версией.

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

test
|----sample
|--------1.0-SNAPSHOT
|----------sample-1.0-20141125.185508-1.jar
|----------sample-1.0-20141125.185508-1.pom

grab ("test", "sample", "1.0-SNAPSHOT") правильно возвращает -1 версию. Если я затем загружу новую ревизию:

test
|----sample
|--------1.0-SNAPSHOT
|----------sample-1.0-20141125.185508-1.jar
|----------sample-1.0-20141125.185508-1.pom
|----------sample-1.0-20141125.191916-2.jar
|----------sample-1.0-20141125.191916-2.pom

grab ("test", "sample", "1.0-SNAPSHOT") даже не спрашивает репозиторий, есть ли что-то новое, и возвращает кешированную банку -1.

grab ("test", "sample", "*") запрашивает у репозитория метаданные, но по-прежнему возвращает кэшированный jar-файл, а затем делает grab ("test", "sample", "1.0-SNAPSHOT") неработающим (возвращает НЕ НАШЕЛ).

Я чувствую, что здесь что-то очевидное упускает ...


person danno    schedule 25.11.2014    source источник


Ответы (1)


Моя реакция коленного рефлекса заключается в том, что вы используете его не по назначению и, следовательно, получаете странные результаты. Вместо этого, возможно, вам следует просто получить зависимость более явно и не включать в нее Grape / Grab.

Вот пример кода, как это можно сделать ...

def downloadArtifact(repo, groupId, artifactId, version, e) {
    println "Fetching ${artifactId}..."
    def artifactResUrl = "${nexusServerUri}${resolvePath}?r=$repo&g=$groupId&a=$artifactId&v=$version&e=$e"
    def artifactRes = new XmlSlurper().parse(artifactResUrl)
    def repoPath = artifactRes.data.repositoryPath
    def address = "${nexusServerUri}${contentPath}/${repo}${repoPath}"
    def filename = "${artifactId}-$version.${e}"
    def file = new File('lib', filename)
    def fos = new FileOutputStream(file)
    def out = new BufferedOutputStream(fos)
    out << new URL(address).openStream()
    out.close()
    println "Done."
}

nexusServerUri = 'http://some.server.com:8081/nexus'
resolvePath = '/service/local/artifact/maven/resolve'
contentPath = '/content/groups'
repo = 'sprn-maven2'
groupId = 'com.abc.somethign'
version = '1.0-SNAPSHOT'
e = 'jar'

downloadArtifact(repo, groupId, 'artifact-id', version, e)

Очевидно, это требует серьезной настройки, но должна получить последнюю зависимость (это было для моего проекта, который нуждался в этом), и если он такой же, как текущий, он не должен выглядеть иначе.

person Todd W Crone    schedule 21.12.2014