복붙노트

[SCALA] 어떻게 일반 명령 줄 프로그램과 쉘에서 SBT의 주요 클래스를 실행합니까?

SCALA

어떻게 일반 명령 줄 프로그램과 쉘에서 SBT의 주요 클래스를 실행합니까?

(스칼라를 통해하지만 엄청난 클래스 경로를 설정하지 않고 직접 실행하는 것처럼) 어떻게 내가 정상적인 명령 줄 프로그램으로 내 응용 프로그램을 실행할 수 있도록하는 것이, 쉘에서 SBT 응용 프로그램을 실행할 수 있습니까?

나는 내가 할 수있는 알고 :

echo hello | sbt 'run-main com.foo.MyMain3 arg1 arg2' > out.txt

그러나 (1) 표준 출력에 가서 모든 표준 출력과 표준 에러가 발생하고, (3) 로거 [정보] 또는 [오류]로 장식 할 모든 출력이됩니다 (2)는 SBT 시작하기 때문에 시작 영원히 소요됩니다.

나는 https://github.com/harrah/xsbt/wiki/Launcher 보았다하지만 새로운 환경과 이것 저것 최대 종속성과 세트를 다운로드하기 때문에 그것은 너무 헤비급 보인다. 난 그냥 내 기존의 개발 환경 내에서이 응용 프로그램을 실행합니다.

지금까지 나는 함께 클래스 경로를 구축하기 위해 내 자신의 스크립트를 자갈길 한, 당신은 또한 다른 일들이 원시 클래스 경로를 인쇄 할 SBT를 얻기 위해 프로젝트 파일을 수정하고자 할 수 있지만 더 나은 방법이 있어야합니다 같은 느낌.

해결법

  1. ==============================

    1.시작 - 스크립트 SBT 플러그인에서 지금이다 :

    시작 - 스크립트 SBT 플러그인에서 지금이다 :

    https://github.com/sbt/sbt-start-script

    그것은 설정하는 몇 가지 단계가 필요하며 OS X에 대한 작업을하지 않는 스크립트를 생성하지만 해당 플랫폼에 있다면 그것은 쉽게 고정 할 수 있습니다 (아래 참조).

    문 사이에 빈 줄 (드 알맞 ㄴ SBT 빌드 파일)을 참고.

    당신은 SBT 실행 - 주요처럼 응용 프로그램을 시작하는 스크립트를 만들 수 있지만 SBT없이 할 때마다 그런 다음, 실행 :

    $ sbt start-script
    
    target/start mypackage.MyMainClass
    
  2. ==============================

    2.여기에 내가 내 SBT (버전 0.10) 프로젝트의 정의가 무엇을,

    여기에 내가 내 SBT (버전 0.10) 프로젝트의 정의가 무엇을,

      val Mklauncher = config("mklauncher") extend(Compile)
      val mklauncher = TaskKey[Unit]("mklauncher")
      val mklauncherTask = mklauncher <<= (target, fullClasspath in Runtime) map { (target, cp) =>
        def writeFile(file: File, str: String) {
          val writer = new PrintWriter(file)
          writer.println(str)
          writer.close()
        }
        val cpString = cp.map(_.data).mkString(":")
        val launchString = """
    CLASSPATH="%s"
    scala -usejavacp -Djava.class.path="${CLASSPATH}" "$@"
    """.format(cpString)
        val targetFile = (target / "scala-sbt").asFile
        writeFile(targetFile, launchString)
        targetFile.setExecutable(true)
      }
    
      ... // remember to add mklauncherTask to Project Settings
    

    mklauncher 작업은 프로젝트의 클래스 경로와이 실행의 스칼라가 이미 설정하는 스크립트 목표 / 스칼라-SBT를 작성합니다. 때마다 클래스 경로 변경 mklauncher 자동으로 실행 한 것이 좋은 것입니다,하지만 난 아직이 일에보고하지 않았습니다.

    (I 임베디드 통역을 생성하기 쉽게, 오히려 스칼라의보다, 자바 클래스 경로를 사용합니다.)

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

    3.시간에 의해 날아와 많은 다른 답변 이후 변경되었습니다. 그것은 현재 SBT 0.13.6 시간이다.

    시간에 의해 날아와 많은 다른 답변 이후 변경되었습니다. 그것은 현재 SBT 0.13.6 시간이다.

    나는 당신이해야 할 수도 있습니다 것은 SBT-onejar 플러그인 또는 SBT 기본 포장기 플러그인 생각합니다.

    SBT-onejar는 "중첩 된 JAR 파일로 모든 코드 및 종속성을 포함하는 단일 실행 파일 JAR 구축을위한 간단한 빌드 도구 플러그인입니다."

    SBT 기본 Packager는 "목표는 DEB, RPM, 사제, MSI와 같은 기본 포장 시스템에 대한 SBT와 내장 스칼라 소프트웨어를 번들 할 수있을 것입니다."

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

    4.https://github.com/typesafehub/xsbt-start-script-plugin : 그냥 SBT 시작 스크립트 플러그인을 발견 :

    https://github.com/typesafehub/xsbt-start-script-plugin : 그냥 SBT 시작 스크립트 플러그인을 발견 :

  5. from https://stackoverflow.com/questions/7134993/how-do-i-run-an-sbt-main-class-from-the-shell-as-normal-command-line-program by cc-by-sa and MIT license