2014-10-26 8 views
4

Я пытаюсь создать многомодульный проект на основе градиента. Существует также проект, который содержит различные сценарии градации, которые позволяют подключаемые конфигурации сборки. Один из этих сценариев предназначен для публикации артефактов в репозитории maven. Это содержание этого скрипта:Задача Gradle publishToMavenLocal выполняется неправильно

apply plugin: 'maven-publish' 

configure(subprojects.findAll()) { 
    if (it.name.endsWith('web')) { 
     publishing { 
      publications { 
       mavenWeb(MavenPublication) { 
        from components.web 
       } 
      } 
     } 
    } else { 
     publishing { 
      publications { 
       mavenJava(MavenPublication) { 
        from components.java 
       } 
      } 
     } 
    } 
} 

build.dependsOn publishToMavenLocal 

Этот скрипт включен в файл градиента построения другого проекта.

apply from: '../../food-orders-online-main/artifact-publish.gradle' 

Когда я бегу строить задачу он всегда показывает, что publishToMavenLocal задача до настоящего времени, и я не могу найти артефакты в локальном хранилище. Я делаю что-то неправильно?

+0

Возможно, проверьте журналы -info и -debug. –

+0

: food-orders-online-admin-business: publishToMavenLocal (Thread [main, 5, main]) sta rted. : food-orders-online-admin-business: publishToMavenLocal Пропускная задача ': food-orders-online-admin-business: publishToMavenLocal', поскольку у него есть никаких действий. : food-orders-online-admin-business: publishToMavenLocal UP-TO-DATE : food-orders-online-admin-business: publishToMavenLocal (Thread [main, 5, main]) com pleted. Взял 0,007 секунды. –

+0

Я уже знаю, что задача пропущена. Мой вопрос - почему. Я думаю, что subprojects.findAll() ничего не возвращает. Тогда как я могу получить доступ ко всем подпроектам? Я могу сделать это в каждом проекте отдельно, но он повторяющийся и глупый, если я могу это сделать. –

ответ

3

Я думаю, что это может быть проявлением ошибки с градиентом, что модули могут потерять задачу publishMavenJavaPublicationToMavenLocal, когда они зависят определенным образом.

Если gradle определяет, что для модуля не существует задачи publishMavenJavaPublicationToMavenLocal, то задача publishToMavenLocal всегда будет сообщать, что она актуальна.

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

root 
root gradle build file 
->A 
    own gradle build file with dependency on shared:domain 
-> shared 
    gradle build file for shared modules 
    -> shared:domain 
    -> shared:B 

Я создал небольшой пример проекта демонстрирует такое поведение здесь - https://github.com/piersy/Gradle2MavenPublishBug

Я также зарегистрировал ошибку с Gradle здесь - http://forums.gradle.org/gradle/topics/the-publishmavenjavapublicationtomavenlocal-task-disappears-from-a-project-when-that-project-is-depended-upon-in-a-specific-way

для теперь обходные пути я нашел являются

  1. Удалите зависимость на разделяемой: домен
  2. Сделать подмодуль с параметрами, указанными в файле сборки родительского модуля
  3. Дают разделяет: домен свой собственный Gradle файл сборки
+0

Благодарим вас за такой подробный и хорошо объясненный ответ. Думаю, я поеду с третьим обходным решением в моем случае. Я также надеюсь, что команда Gradle решит эту проблему в ближайшее время. –

+0

Учитывая, сколько времени мне потребовалось, чтобы отследить эту ошибку, я был очень рад возможности поделиться общими обходами с кем-то. – PiersyP

+1

Возможно, вам стоит поднять его в [вопросительный трекер] (https://issues.gradle.org/browse/GRADLE), а не на форуме. –

1

Приспосабливаясь ответ от here, он работает на меня.

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
     } 
    } 
    repositories { 
     mavenLocal() 
    } 
} 
Смежные вопросы