Как повторно использовать определения проекта модуля SBT - PullRequest
2 голосов
/ 10 июня 2011

Как я могу поделиться определением Simple Build Tool module project
между многими родительскими проектами?
и в то же время
включить определение проекта модуля в каждый файл сборки родительского проекта?

Пояснение:

У меня есть родительский проект, проект модуля Dao , проект модуля App и проект Core . Оба проекта модулей (т.е. Дао и Приложение ) зависят от (точно такой же версии) Core :

Parent project
  |
  |--> app
  |     `--> core
  |
  `--> dao
        `--> core

Я определил App , Dao и Core в своих собственных каталогах проектов (, как описано здесь )
поэтому они могут быть возобновлены многими родительскими проектами.
Однако, когда я загружаю родительский проект, SBT выдает эту ошибку:

The same directory is used for output for multiple projects

Поэтому вместо этого я скопировал определения проектов App , Dao и Core в определение родительского проекта. То есть объявлены все проекты и их зависимости в одном файле сборки родительского проекта.

Теперь все отлично работает.

Однако , у меня много родительских проектов. Каждый родительский проект использует разные версии проекта App и проекта Dao . (DAO = объект доступа к данным - например, хранилище базы данных или файловое хранилище, варьируется от проекта к проекту.)

Поэтому мне нужно будет повторять определения App и Dao в каждом родительском проекте, чтобы избежать The same directory is used for output for multiple projects ошибка. Но результатом будет много дублированного кода сборки проекта!

Как мне этого избежать?

У меня есть одна идея: возможно, я смогу создать модуль, например, для проект Dao , с trait, который объявляет все зависимости Dao (в сторонних библиотеках). Тогда дублированного кода почти не будет, только зависимость от Dao от Core будет повторяться в каждом родительском проекте.

Что вы думаете?
Возможно, у вас есть другие идеи?

1 Ответ

4 голосов
/ 10 июня 2011

Ввод зависимостей проекта в черту и смешивание их по требованию является одним из вариантов .

Однако я бы посоветовал вам изучить SBT 0.10 (вам все равно придется перейти на него однажды). В новом SBT это можно сделать так же просто, как

import sbt._

object RootProject extends Build
{
        lazy val projects = Seq(root, core, dao, app)

        override val root = Project("root", file(".")) aggregate(core, dao, app)
        lazy val core  = Project("core", file("core"))
        lazy val app  = Project("app", file("app")) dependsOn(core)
        lazy val dao = Project("dao", file("dao")) dependsOn(core)
}

, где любой проект - core, app, dao - может быть автономным с собственными настройками и зависимостями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...