2017-01-26 12 views
1

나는 SBT에 대한 몇 가지 질문이 'dependOn'절을 사용하는 옵션이 왜SBT, 몇 가지 질문 :의 DependsOn

1) 내가 궁금하네요. 나는 이것이 프로젝트에 참여한다는 것을 충분히 이해합니다.

lazy val projectA = Project("A", file("a")) 
lazy val projectB = Project("B", file("b")).dependsOn(projectA) 

이 코드에서 싫어하는 것 : 당신은 projectB에 PROJECTA의 버전을 지정할 수 없습니다. 항상 projectA의 최신 조건을 집계합니다. 모든 하위 프로젝트가 서로 밀접하게 결합되어있는 경우 응용 프로그램을 다중 프로젝트로 분할하는 이유는 무엇입니까?

다른 옵션이 있습니다. 서브 프로젝트를 버전이있는 바이너리 저장소에 게시하고 설정에 종속성으로 추가 할 수 있습니다. 이 코드를 사용하지 않는 이유는

: 나오긴의

lazy val projectA = project("A", file("a")) 
lazy val projectB = Project("B", file("b")).settings(libraryDependencies ++= Seq("groupOfA" %% "A" % "versionOfA")) 

, 당신이 바이너리 저장소가 있어야합니다. 하지만 문제는 아니며 로컬에서 넥서스를 설치할 수 있습니다 (거의 모든 것을 지원하고 자유롭게 사용할 수 있습니다). oss.sonatype.org를 사용하십시오.

2)이 질문은 첫 번째 질문과 관련이 있습니다. 왜 'publishLocal'작업이 있는지 이해할 수 없습니다. SBT는 Ivy2 저장소를 사용하지만, 프로젝트를 넥서스 또는 oss.sonatype.org에 게시 할 때 maven2 저장소에 게시합니다. 그리고 문제는 sbt가 로컬에서 게시되고 maven에서 캐시 된 것을 감지 할 때 발생합니다. 오류가 발생합니다. 나는 이것이 sbt 버그 (https://github.com/sbt/sbt/issues/2687)라고 생각합니다. publishLocal을 더 이상 사용하지 않고, 다중 컴포넌트로 애플리케이션을 분할하려는 경우 왜 바이너리 저장소를 설치하지 않았는지 이해하지 못합니다.

답변

1

앞서 언급했듯이 libraryDependencies은 다중 프로젝트 관리의 경우 복잡성이 증가하는 대신 엄격하게 dependsOn보다 강력합니다.

별도의 바이너리 저장소를 설치하지 않아도 로컬 저장소는 publishLocal으로 게시하기에 충분합니다.

다음 질문에 우리를 데리고 오는 이유는 그것이 기본값으로 아이비에 게시 할 때 publishLocal을 사용하는 이유입니다. 두 가지 : 먼저 Maven 스타일로 게시 할 지역 게시 설정 : http://www.scala-sbt.org/0.13/docs/Publishing.html#Modifying+the+generated+POM (publishMavenStyle := true).

둘째, Maven Central에서 로컬로 게시되고 캐싱 된 동일한 버전을 가지고있을 때의 문제. 짧은 대답 : 그렇게하지 마십시오. Maven Central에 게시하는 경우 테스트 용으로 로컬 게시를 사용해야하며이고 publishLocal에만 'SNAPTSHOT'버전이 있어야합니다. Maven Central에 고정 버전 번호 만 게시해야합니다. 그럼 갈등은 없습니다. Maven이 설계된 방법입니다. 버전 번호는 불변이어야하며 'SNAPSHOT은 테스트 용이어야합니다.

+0

답변 해 주셔서 감사합니다. –