복붙노트

[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. ==============================

    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. ==============================

    2.@douglaz '대답에 추가

    @douglaz '대답에 추가

    runMain in Compile <<= Defaults.runMainTask(fullClasspath in Compile, runner in (Compile, run))
    

    runMain 작업에 해당하는 수정 프로그램입니다.

  3. ==============================

    3.당신은 SBT-리볼버 플러그인을 사용하는 경우, 여기의 "다시 시작"작업에 대한 솔루션입니다 :

    당신은 SBT-리볼버 플러그인을 사용하는 경우, 여기의 "다시 시작"작업에 대한 솔루션입니다 :

    Revolver.reStart에 fullClasspath << = fullClasspath 컴파일에서

    UPD가 : SBT-1.0 새 지정 양식을 사용할 수 있습니다 :

    Revolver.reStart에 fullClasspath = (컴파일에서 fullClasspath) .value

  4. ==============================

    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
      )
    
  5. from https://stackoverflow.com/questions/18838944/how-to-add-provided-dependencies-back-to-run-test-tasks-classpath by cc-by-sa and MIT license