[SCALA] 어떻게 추가 "제공"종속성 / 테스트 작업 '클래스 경로를 실행하는 백업?
SCALA어떻게 추가 "제공"종속성 / 테스트 작업 '클래스 경로를 실행하는 백업?
다음 예제 build.sbt입니다 :
import AssemblyKeys._
assemblySettings
buildInfoSettings
net.virtualvoid.sbt.graph.Plugin.graphSettings
name := "scala-app-template"
version := "0.1"
scalaVersion := "2.9.3"
val FunnyRuntime = config("funnyruntime") extend(Compile)
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "provided"
sourceGenerators in Compile <+= buildInfo
buildInfoPackage := "com.psnively"
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, target)
assembleArtifact in packageScala := false
val root = project.in(file(".")).
configs(FunnyRuntime).
settings(inConfig(FunnyRuntime)(Classpaths.configSettings ++ baseAssemblySettings ++ Seq(
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "funnyruntime"
)): _*)
목표는 그 종속성 어셈블리 이슈에 포함되지 않도록 "제공"스파크 코어를 가지고 있지만, 실행 - 테스트 관련 작업에 대한 런타임 클래스 경로에 그들을 다시 포함시킬 수 있습니다.
사용자 지정 범위를 사용하는 것은 궁극적으로 도움이 될 것으로 보인다,하지만 실제로 사용자 정의 libraryDependencies를 사용하고 희망 기본을 무시하는 기본 / 글로벌 실행 / 테스트 작업을 야기하는 방법에 좌절하고있다. I는 다음과 같은 일을 시도했다 :
(run in Global) := (run in FunnyRuntime)
그리고는 아무 소용이 좋아합니다.
요약 :이 본질적으로 서블릿 API는에있는 웹 경우의 일반화를 느낀다 범위 및 실행 / 테스트 작업은 일반적으로 실제로 실행 코드에 서블릿 API를 제공 않습니다 서블릿 컨테이너 포크 "제공". 여기에 유일한 차이점은 내가 별도의 JVM / 환경 떨어져 분기 아니에요이다; 난 그냥 수동으로 효과적으로 "취소"를 "제공"범위를 이러한 작업 '클래스 경로를 증대하고 싶지만, 조립 이슈에서 종속성을 제외하는 것을 계속하는 방법이다.
해결법
-
==============================
1.assembly.sbt에 사용되는 유사한 사례 I의 경우 :
assembly.sbt에 사용되는 유사한 사례 I의 경우 :
run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))
지금은 '실행'작업은 "제공"로 표시된 포함한 모든 라이브러리를 사용합니다. 더 이상의 변화는 필요 없었다.
최신 정보:
@ 롭 솔루션은 build.sbt의 설정에 추가, 최신 SBT 버전에 하나의 작업이 될 것 같다 :
run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)).evaluated, runMain in Compile := Defaults.runMainTask(fullClasspath in Compile, runner in(Compile, run)).evaluated
-
==============================
2.@douglaz '대답에 추가
@douglaz '대답에 추가
runMain in Compile <<= Defaults.runMainTask(fullClasspath in Compile, runner in (Compile, run))
runMain 작업에 해당하는 수정 프로그램입니다.
-
==============================
3.당신은 SBT-리볼버 플러그인을 사용하는 경우, 여기의 "다시 시작"작업에 대한 솔루션입니다 :
당신은 SBT-리볼버 플러그인을 사용하는 경우, 여기의 "다시 시작"작업에 대한 솔루션입니다 :
Revolver.reStart에 fullClasspath << = fullClasspath 컴파일에서
UPD가 : SBT-1.0 새 지정 양식을 사용할 수 있습니다 :
Revolver.reStart에 fullClasspath = (컴파일에서 fullClasspath) .value
-
==============================
4.또 다른 옵션은 실행 / 테스트 대 조립에 대해 별도의 SBT 프로젝트를 만드는 것입니다. 이것은 당신이뿐만 아니라 내장 된 스파크와 SBT를 통해 직접 실행하기위한 실행 runTestProj / SBT, 제출 스파크와 함께 배포 지방 항아리를 구축 조립 / asseblyProj SBT 실행할 수 있습니다. 추가 혜택으로, runTestProj는 인 IntelliJ에서 수정없이 작동하며, 별도의 메인 클래스를 위해 각 프로젝트에 대해 정의 할 수 있습니다 예를 들어, SBT와 함께 실행할 때 코드에서 스파크 마스터를 지정합니다.
또 다른 옵션은 실행 / 테스트 대 조립에 대해 별도의 SBT 프로젝트를 만드는 것입니다. 이것은 당신이뿐만 아니라 내장 된 스파크와 SBT를 통해 직접 실행하기위한 실행 runTestProj / SBT, 제출 스파크와 함께 배포 지방 항아리를 구축 조립 / asseblyProj SBT 실행할 수 있습니다. 추가 혜택으로, runTestProj는 인 IntelliJ에서 수정없이 작동하며, 별도의 메인 클래스를 위해 각 프로젝트에 대해 정의 할 수 있습니다 예를 들어, SBT와 함께 실행할 때 코드에서 스파크 마스터를 지정합니다.
val sparkDep = "org.apache.spark" %% "spark-core" % sparkVersion val commonSettings = Seq( name := "Project", libraryDependencies ++= Seq(...) // Common deps ) // Project for running via spark-submit lazy val assemblyProj = (project in file("proj-dir")) .settings( commonSettings, assembly / mainClass := Some("com.example.Main"), libraryDependencies += sparkDep % "provided" ) // Project for running via sbt with embedded spark lazy val runTestProj = (project in file("proj-dir")) .settings( // Projects' target dirs can't overlap target := target.value.toPath.resolveSibling("target-runtest").toFile, commonSettings, // If separate main file needed, e.g. for specifying spark master in code Compile / run / mainClass := Some("com.example.RunMain"), libraryDependencies += sparkDep )
from https://stackoverflow.com/questions/18838944/how-to-add-provided-dependencies-back-to-run-test-tasks-classpath by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 동적 특성에 혼합 (0) | 2019.11.06 |
---|---|
[SCALA] 어떻게 자기 형을 구현하는 등 스칼라의이 입력, 추상적 인 유형을 사용 하는가? (0) | 2019.11.06 |
[SCALA] 스칼라에서 유효한 식별자 문자 (0) | 2019.11.06 |
[SCALA] 다중 스칼라 형 패턴 매칭 (0) | 2019.11.06 |
[SCALA] 자동으로 우아하게 스파크 SQL에 DataFrame 평평 (0) | 2019.11.06 |