Грааль и местные зависимости 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...
Осталось два вопроса:
- Разве Maven не заключает контракт на получение версий SNAPSHOT по той же самой причине?
- Как принудительно очистить кеш? И где это?
Я открою новый вопрос, чтобы ответить на часть 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
}
}