2015-02-11 2 views
2

У меня есть проект градиента со многими субпроектами и суб-субпроектами. Мы обнаружили странное условие, что выглядит следующим образом:Зависимость от смешения градиента с дублирующимися названиями подпроектов

Вот abrievated структура проекта:

  • build.gradle
  • settings.gradle
  • суб-1
    • общий
      • build.gradle
      • src
    • суб-а
      • общий
        • build.gradle
        • ЦСИ
      • войны
        • build.gradle
        • ЦСИ
  • sub2

Проблема у меня есть - суб: суб-1: суб-а: война зависит от: суб-1: общее и: суб-1: суб- a: common и: sub-1: sub-a: war не удается построить, потому что некоторые, как gradle видит обе зависимости, но только поддерживают один: sub-1: sub-a: common. Запуск зависимостей gradle отобразит строку, которая выглядит следующим образом: sub-1: common -> sub-1: sub-a: common

Похоже, что град отбрасывает некоторые вещи при вычислении зависимостей или слишком умен и видит 2 суб- проекты, которые имеют одно и то же «конечное» имя и выбирают только один из них в вычисленном или дистиллированном списке зависимостей.

Конечно, если я переименую: sub-1: sub-a: common to: sub-1: sub-a: common1 проблема исчезает. FWIW: оба общих подпроекта создают банки - но они устанавливают специфические архивыBaseName, которые сильно отличаются друг от друга.

Недостаточно убедиться, что все названия подпроекта «лист» уникальны по всему миру, есть ли способ обойти это?

(ПРИМЕЧАНИЕ. Возможно, происходят дегенеративные структуры структуры кода/структуры проекта, однако это проявляется в проекте преобразования ant-> gradle, в котором мы не будем изменять структуру в этой «фазе» только для инструмента построения. Я приветствую комментарии для изменения struture, я хочу посмотреть, есть ли что-то, что я могу сделать с тем, что у меня есть)

+0

Проблема не устранена, но причина и средства защиты немного ясны. Для любопытных [здесь] (http://forums.gradle.org/gradle/topics/dependency-substitution-wrong-with-more-than-one-sub-project-with-same-name) - это град/форум примерно такой же предмет - но более четкое описание проблемы. И [здесь] (https://github.com/fwelland/Submarine) - проект github, который иллюстрирует это условие. – fwelland

ответ

0

Быстрое решение состоит в том, чтобы сделать проект group уникальными именами.

Конечно, если вам нужно публиковать артефакты из идентичных проектов, это может быть невозможно. Однако это обычно не так, и изменение имени group разрешает конфликт.

project(':sub1:common').group = 'sub1.common' 
project(':sub1:suba:common').group = 'sub1.suba.common' 
Смежные вопросы