두 가지 이유가 있습니다.
기본적으로 sbt는 패키징 유형이 제한된 이슈 (jar
, bundle
및 그 이상) 만 인식합니다. 우리가이 일을하면 우리가 할 수있는,
libraryDependencies += ("net.alchim31.maven" % "scala-maven-plugin" % "3.3.1")
.withExplicitArtifacts(Vector("scala-maven-plugin", "maven-plugin", "jar"))
: 우리가 누구의 포장 유형 maven-plugin
인 유물에 관심이 SBT에게하기 위해, 우리는 명시 적으로 종속성에서 우리가하고자하는 유물 이야기해야합니다 실제로 consoleProject
에 다음 코드를 실행하여 우리의 유물을 얻을 않았다 SBT을 확인 : myScope
이어야합니다
Keys.update.in(myScope).in(myProject).eval.allFiles
.find(_.getAbsolutePath.contains("net"))
하는 것으로 하나 Compile
, Test
또는 Runtime
(일반적으로, 그것은 Compile
있어) 및 myProject
은]을 참조해야한다는 nce를 종속성을 선언 한 프로젝트에 추가합니다. 이전 작업의 결과, 모든 것이 잘 수행 된 경우 Some(...)
이되며 이슈가 실제로 해결되고 발견되었음을 나타냅니다.
그러나 아직 완료되지 않았습니다. 우리가 myProject/dependencyClasspath
을 실행하면 이번에는 sbt 쉘에서 우리의 유물을 볼 수 없습니다. 두 번째 단계가 필요한 곳입니다 : 새 패키징 유형을 classpathTypes
에 추가하여 sbt가 컴파일 클래스 경로에 이슈를 추가해야합니다. 이 작업이 완료 모든으로
classpathTypes += "maven-plugin"
, 우리는 myProject/dependencyClasspath
를 실행하고 우리 유물의 현재를 볼 수 있습니다.
그러나 이야기는 끝나지 않았으며 여기서 "버그"영역을 입력합니다. Sbt는 pom 파일의 종속성을 선언하는 pom 구성에 classpathTypes
의 패키징 유형을 자동으로 추가하지 않습니다. 그렇지 않으면 응용 프로그램이 ClassNotFoundException
또는 모든 종속 아티팩트가 해결되고 클래스로로드되지 않았기 때문에 유사한 문제로 실패합니다.
그래서 작동하는 응용 프로그램을 위해, 당신은 스스로를 수행해야합니다 :
makePomConfiguration :=
makePomConfiguration.value.withIncludeTypes(classpathTypes.value)
이 기본적으로 수행되지 않는다는 사실을이 1.x에서의 단지 SBT의 버그