[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.시작 - 스크립트 SBT 플러그인에서 지금이다 :
시작 - 스크립트 SBT 플러그인에서 지금이다 :
https://github.com/sbt/sbt-start-script
그것은 설정하는 몇 가지 단계가 필요하며 OS X에 대한 작업을하지 않는 스크립트를 생성하지만 해당 플랫폼에 있다면 그것은 쉽게 고정 할 수 있습니다 (아래 참조).
문 사이에 빈 줄 (드 알맞 ㄴ SBT 빌드 파일)을 참고.
당신은 SBT 실행 - 주요처럼 응용 프로그램을 시작하는 스크립트를 만들 수 있지만 SBT없이 할 때마다 그런 다음, 실행 :
$ sbt start-script
target/start mypackage.MyMainClass
-
==============================
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.시간에 의해 날아와 많은 다른 답변 이후 변경되었습니다. 그것은 현재 SBT 0.13.6 시간이다.
시간에 의해 날아와 많은 다른 답변 이후 변경되었습니다. 그것은 현재 SBT 0.13.6 시간이다.
나는 당신이해야 할 수도 있습니다 것은 SBT-onejar 플러그인 또는 SBT 기본 포장기 플러그인 생각합니다.
SBT-onejar는 "중첩 된 JAR 파일로 모든 코드 및 종속성을 포함하는 단일 실행 파일 JAR 구축을위한 간단한 빌드 도구 플러그인입니다."
SBT 기본 Packager는 "목표는 DEB, RPM, 사제, MSI와 같은 기본 포장 시스템에 대한 SBT와 내장 스칼라 소프트웨어를 번들 할 수있을 것입니다."
-
==============================
4.https://github.com/typesafehub/xsbt-start-script-plugin : 그냥 SBT 시작 스크립트 플러그인을 발견 :
https://github.com/typesafehub/xsbt-start-script-plugin : 그냥 SBT 시작 스크립트 플러그인을 발견 :
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
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 - 인쇄 배열 (0) | 2019.11.15 |
---|---|
[SCALA] 당신은 어떻게 스칼라의 기본 생성자에서 로컬 VAR / 발을 정의합니까? (0) | 2019.11.15 |
[SCALA] 스칼라에서 반복자 및 스트림의 차이? (0) | 2019.11.15 |
[SCALA] 스칼라 : VAR-인수 기능에 패스 서열 (0) | 2019.11.15 |
[SCALA] 어떻게 문맥에 관련한 타입 클래스의 인스턴스 바인딩을받을 수 있나요? (0) | 2019.11.15 |