2014-01-07 3 views
0

Рассмотрим следующий мульти-проекта сценарий сборки: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 так явной группы: имя: версия зависимость не требуется

ответ

0

Вы должны определить зависимости между проектами более или менее Точно так же, как и в Maven:

Например, как это:

project(':app') { 
    apply plugin: 'ear' 
    dependencies { 
    compile project (':webgui') 
    compile project (':service') 
    } 
} 

Но вам нужно определить settings.gradle, который содержит модули, как это:

include 'app' 
include 'domain' 
include 'service' 
include 'service-client' 
include 'webgui' 
+0

Я упомянул в вопросе, что у меня были настройки.gradle с линией 'include 'client', 'shared''. Я не уверен, что разбивка на отдельные строки меняет что-то – matheeeny

+0

Это работает. Они не понимали, что у меня было то, что я не знал, что зависимость проекта создаст pom.xml с правильной информацией о группе/имени/версии. Я думаю, что это было из-за ранней проблемы, с которой у меня был зависимый проект, у меня не было определенной версии или группы. – matheeeny

Смежные вопросы