2017-12-27 62 views
0

필자는 필자의 인공물이 패키징 유형으로 기존의 jar이 아닌 종속성을 해결해야하지만, maven-plugin (보다 구체적으로 내가 관심을 가지는 artifact는 Maven 플러그인 임)을 해결해야한다. Maven 지역에서 이것은 <packaging> XML 태그를 통해 지정됩니다.다른 패키지 묶음 유형이있는 sbt의 종속성을 어떻게 해결할 수 있습니까?

프로젝트를 빌드 할 때 프로젝트가 sbt 빌드에 종속되어 있지만 sbt가 프로젝트를 성공적으로 업데이트하지만 해결 된 종속성이 클래스 경로에 없습니다. 그런 종속성에 의존하는 코드를 컴파일하도록 클래스 패스에 이슈를 추가하려면 어떻게해야합니까? 내 빌드에 받는다는 플러그인을 추가하는 데 사용

코드 : SBT는 클래스 경로에 원하는 유물을 추가하지 않습니다, 따라서 컴파일이 실패하는 이유

libraryDependencies += "net.alchim31.maven" % "scala-maven-plugin" % "3.3.1" 

답변

0

두 가지 이유가 있습니다.

기본적으로 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의 버그