2015-08-18 5 views
2

Я новичок в Scala, поэтому надеюсь, что этот вопрос не слишком наивен.sbt multi-module project: зависимость между проектами

Предположим, у меня есть multi-module sbt-project и существует зависимость между проектами.

lazy val core = (project in file("core")). 
    settings(...) 

    lazy val utils = (project in file("utils")). 
    settings(...).dependsOn(core) 

вопрос, это означает, что .dependsOn(core) если я projects utils; compile он собирается compilecore заранее (и использовать последнюю версию)?

Я спрашиваю об этом, так как на практике я не вижу этого поведения (и я хочу его).

ответ

2

Вы ищете метод aggregate. Как это:

lazy val utils = (project in file("utils")). 
    settings(...).dependsOn(core).aggregate(core) 

Совокупное здесь метод вызывает все задачи выполняются на utils быть также работают на core (обновление, и т.д. ...). Если вы хотите отключить выполнение задачи по агрегированному проекту, вы можете проверить the documentation here

+0

Спасибо! поэтому добавлена ​​опция «aggregate», и она сработала; но что произойдет, если теперь внутри 'utils' я публикую локально? это пакет 'public', который будет содержать« core »? – Daniel

+0

Опубликованный пакет всегда будет включать ядро, потому что вы зависите от него. Если вы оставите его так, команда 'publish' будет запущена также на« ядре ». Вы можете отключить определенные команды от запуска в других проектах. Я обновлю свой ответ на эту информацию и ссылку на соответствующую документацию. – Asa

2

Да, вы должны увидеть это поведение (и я это вижу на практике). Как говорит связанная документация (обратите внимание, что роли util и core противоположны там: core зависит от util):

Это также создает упорядоченность между проектами при составлении их; утилизация должна быть обновлена ​​и скомпилирована до того, как можно будет скомпилировать ядро ​​

+0

Как насчет настройки 'aggregate', о которой говорит другой ответ? Что ты об этом думаешь? – Daniel

+0

Также я не понимаю, почему вы говорите, что зависимость противоположна; как здесь, в документации говорит «' foo dependsOn (bar) 'означает, что конфигурация компиляции в' foo' зависит от конфигурации компиляции в 'bar'." http://www.scala-sbt.org/0.13/tutorial/Multi-Project.html – Daniel

+0

С той же логикой 'utils' зависит от' core'. Я прав? – Daniel

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