Рассмотрим следующий мульти-проекта сценарий сборки:Gradle Проект сборки для того, чтобы Maven Задачи
build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
group = "myorg"
version = "1.0.0-SNAPSHOT"
}
project(':client') {
dependencies {
compile 'myorg:shared:1.0.0-SNAPSHOT'
}
}
С помощью следующих файлов:
├── build.gradle
├── client
│ └── src
│ └── main
│ └── java
│ └── myorg
│ └── client
│ └── MyOrgClient.java
├── settings.gradle
└── shared
└── src
└── main
└── java
└── myorg
└── shared
└── MyOrgObj.java
В вышеприведенном файлы MyOrgClient.java содержит myorg.shared.MyOrgObj
, а settings.gradle имеет одну строку include 'client', 'shared'
Проблема
Проект/задача порядок сборки для связанных с Maven задач, таких как установка локально и развертывание в удаленных хранилищ не принимает во внимание предполагаемую зависимость проекта. Поскольку Gradle не знает, что 'myorg:shared:1.0.0-SNAPSHOT'
создается project(':shared')
, порядок сборки :client -> :shared
и приводит к ошибкам, как показано ниже:
$ gradle install
:client:compileJava
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':client:compile'.
> Could not find myorg:shared:1.0.0-SNAPSHOT.
Required by:
myorg:client:1.0.0-SNAPSHOT
Вопрос: Есть стандартный способ справиться с этой проблемой? Я пробовал эти решения без успеха:
- Использование
mustRunAfter
, но столкнулось с проблемами с задачами, которые еще не заданы. Я также не думаю, что это будет хорошо масштабироваться с большим количеством проектов - Добавление
archives project(':shared')
в зависимости клиента - Добавление
compile project(':shared')
в зависимости клиентаи затем удаляя его из сгенерированного ПОМ. К сожалению, это не добавляет зависимости к задаче установки или artifactoryPublishРедактировать: Это действительно решение. Зависимость проекта обеспечит правильную версию/название/группу в сгенерированном pom.xml так явной группы: имя: версия зависимость не требуется
Я упомянул в вопросе, что у меня были настройки.gradle с линией 'include 'client', 'shared''. Я не уверен, что разбивка на отдельные строки меняет что-то – matheeeny
Это работает. Они не понимали, что у меня было то, что я не знал, что зависимость проекта создаст pom.xml с правильной информацией о группе/имени/версии. Я думаю, что это было из-за ранней проблемы, с которой у меня был зависимый проект, у меня не было определенной версии или группы. – matheeeny