Грааль и местные зависимости Maven

Я разрабатываю небольшой веб-интерфейс в Grails. Это в основном "ультралегкое" клиентское приложение, которое асинхронно подключается через JMS.

У меня есть две зависимости в проекте, которые я хотел бы извлечь из репозитория Maven. Они есть activemq а также acme-adapter-apiвнутренняя зависимость, недоступная в удаленном хранилище.

Я настроил свой BuildConfig.groovy (Grails 1.2M4) файл, чтобы получить доступ к моим зависимостям:

repositories {
    grailsPlugins()
    grailsHome()
    mavenCentral()
    mavenRepo('D:/maven-repo')
} dependencies {
    compile 'org.apache.activemq:apache-activemq:4.1.1'
    compile 'com.acme:acme-adapter-api:1.3-SNAPSHOT'
}

Когда я бегу grails dependency-reportЯ вижу эту строку относительно acme-adapter-api, например:

acme-adapter-api by com.acme  
108 kB (0 kB downloaded, 108 kB in cache)

Когда я пытаюсь бежать grails compileМне не везет, так как потом жалуется, что не может решить классы из com.acme группа.

Интересно, что activemq зависимости не кажутся проблемой...

Разница в том, что ACM-зависимости не находятся в mavenCentral(), но только в mavenRepo("D:/maven-repo"), Поэтому я подумал: "Может быть, это не то, что он взял с локального диска…" и изменил версию на какое-то забавное (1.999-SNAPSHOT) значение, которого нет в BuildConfig.groovy файл. При беге grails compile снова команда истекла, сказав, что версия не может быть найдена:

UNRESOLVED DEPENDENCIES
D:/maven-repo: unable to get resource for com/acme#acme-adapter-api;1.999-SNAPSHOT

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

2 ответа

Решение

Оказалось, что проблема тогда была в непустом кеше для артефакта. В то время как файл jar activemq не был затронут, файл acme-adapter-api.jar фактически много раз менялся, но без увеличения идентификатора сборки maven, 1.3, в приведенном выше случае.

Я мог это исправить, когда я увеличил номер сборки до 1.4-SNAPSHOT...

Осталось два вопроса:

  1. Разве Maven не заключает контракт на получение версий SNAPSHOT по той же самой причине?
  2. Как принудительно очистить кеш? И где это?

Я открою новый вопрос, чтобы ответить на часть 2 здесь

Grails 1.3.6 был обновлен до версии Ivy 2.2 (в которой указано, что было применено исправление для https://issues.apache.org/jira/browse/IVY-938), и я могу получать обновления версий SNAPSHOT, если я укажу "изменение" = true", как в:

dependencies {
  runtime ('groupId:artifactId:version-SNAPSHOT') {
    changing = true
  }
}
Другие вопросы по тегам