SBT 여러 프로젝트에서 기본 웹 응용 프로그램은 일부 하위 프로젝트에 의존합니다. 스텁 베드 모델을 생각할 때 스텁 모델 구현을 분리 된 하위 프로젝트로 만들고 싶습니다.SBT 동적 프로젝트 종속성 (명령 줄 인수 기반)
문제점 : SBT 프로젝트 종속성은 SBT에서 미리 정의됩니다. 커맨드 라인에 의해 서브 프로젝트 중 하나 또는 다른 프로젝트에 따라 동적으로 만들 수는 없습니다.
즉, 웹 앱이 실제 구현 된 모듈에만 의존하거나 "스텁 된 빌드"를 사용하여 웹 응용 프로그램이 동일한 프로젝트 트리의 스텁 모듈에만 종속되도록 만드는 "릴리스 빌드"를 가질 수 없음을 의미합니다 .
종속성을 분리하는 아이디어는 다음과 같습니다. 제품 출시 전쟁에 스텁이있는 병이 포함되기를 원하지 않습니다. 스텁 된 항아리는 테스트 환경에서만 사용할 수 있어야합니다.
질문 : 명령 줄 인수를 사용하여 SBT에게 어떤 하위 프로젝트가 의존하게 할 수 있습니까?
일반적인 부두에서 프로젝트를 시작할 때 : 시작, 기본 프로젝트는 정규 서브 프로젝트에 의존해야합니다. '-Stub = true'와 같은 명령 줄을 사용하여 SBT를 시작하면 주 프로젝트가 종속 프로젝트를 스텁 서브 프로젝트로 변경하고 싶습니다. 시간을 제공하기 때문에 스텁 모델이나 정규 스텁 모델에서 컴파일러가 종속성을 업데이트 할 수있는 기회를 가져야합니다. SBT에서 할 수 있습니까? SBT를 실행하면
lazy val DataTier = Project(
id = "dataTier",
base = file("dataTier"))
}
lazy val StubbedDataTier = Project(
id = "stubbeddataTier",
base = file("stubbeddataTier"))
}
lazy val webApp = Project(
"tiny-web",
file("."))
.aggregate(
DataTier,
StubbedDataTier
)
.dependsOn(
if (getCmdLineArg("Stub") == "true") StubbedDataTier else DataTier
)
, 우리는 스텁 할 수있는 모델 : 여기
은 샘플 프로젝트./sbt ~jetty:start -Stub = true
또는 일반 모델의
./sbt ~jetty:start
SBT하지 않는 경우 그것을지지하십시오, SBT를위한 새로운 특징이 될 수 있습니까?
.dependsOn(
if (getCmdLineArg("Stub") == "true") StubbedDataTier else DataTier
)