[SCALA] 표준 작업 이후에 자동으로 실행 사용자 지정 작업 /
SCALA표준 작업 이후에 자동으로 실행 사용자 지정 작업 /
나는 종종 표준 작업 중 하나를 실행하기 전에 몇 가지 사용자 정의를 수행합니다. 나는이 실행 내가 원하는 순서대로 작업을 기존의 것을 새로운 작업을 할 수 있습니다 실현,하지만 난 그가 대신 컴파일 내 컴파일을 실행하도록되어있는 개발자 미스가 크고 수정 오류로 하드를 리드하는 그 복잡하고 기회를 찾을 수 .
나는 사용자 지정 작업을 정의 할 수 있도록 종속성 기존 작업의 나무 (예를 들어 패키지 - 빈) 그래서 내 사용자 지정 작업이 바로 전에 실행될 때마다 누군가가 호출하는 패키지 - 빈 그로하고 주입 (앱 준비 말한다).
나는이 일을 시도
def mySettings = {
inConfig(Compile)(Seq(prepareAppTask <<= packageBin in Compile map { (pkg: File) =>
// fiddle with the /target folder before package-bin makes it into a jar
})) ++
Seq(name := "my project", version := "1.0")
}
lazy val prepareAppTask = TaskKey[Unit]("prepare-app")
이 항아리에 컴파일 출력을 패키지하기 전에하지만 패키지 빈 오른쪽에 의해 자동으로 실행 아니에요. 그래서 내가 어떻게 적절한 시간에 실행되도록 위의 코드를 변경합니까?
더 일반적으로 어디 컴파일 같은 다른 작업과 후킹에 대한 정보를 찾을 수 있습니까 자신의 작업을하기 전에 및 표준 작업이 호출 된 후 실행되는 것을 보장하는 일반적인 방법은 무엇입니까?.
해결법
-
==============================
1.기존 작업을 확장하는 것은 (기존 작업을 수정 섹션 봐)가 SBT 작업에 대한 문서가 설명되어 있습니다.
기존 작업을 확장하는 것은 (기존 작업을 수정 섹션 봐)가 SBT 작업에 대한 문서가 설명되어 있습니다.
이 같은:
compile in Compile <<= (compile in Compile) map { _ => // what you want to happen after compile goes here }
사실, 다른 방법이있다 - 컴파일에 의존하여 작업을 정의
prepareAppTask := (whatever you want to do) dependsOn compile
그리고 그 다음에 의존 packageBin 수정 :
packageBin <<= packageBin dependsOn prepareAppTask
(테스트 비,하지만 일반적으로 추력이 작동해야 위의 모두가, 나는 희망).
-
==============================
2.@ 폴 백정으로 이전 답변에 대한 업데이 트 같이, 이것은 ==이 더 이상 지원되지 << 1.x의 버전 이후 SBT에서 약간 다른 방식으로 수행 될 수 없었다. 난 내 프로젝트 중 하나를 사용하는 것이 컴파일 전에 실행하는 샘플 작업의 예를했다 :
@ 폴 백정으로 이전 답변에 대한 업데이 트 같이, 이것은 ==이 더 이상 지원되지 << 1.x의 버전 이후 SBT에서 약간 다른 방식으로 수행 될 수 없었다. 난 내 프로젝트 중 하나를 사용하는 것이 컴파일 전에 실행하는 샘플 작업의 예를했다 :
lazy val wsdlImport = TaskKey[Unit]("wsdlImport", "Generates Java classes from WSDL") wsdlImport := { import sys.process._ "./wsdl/bin/wsdl_import.sh" ! // or do whatever stuff you need } (compile in Compile) := ((compile in Compile) dependsOn wsdlImport).value
이것은이 1.x에서 이전에 수행 된 방법과 매우 유사
또한, 기본적으로 작업의 조성 (대신 종속 계층의)는 공식 SBT의 문서에서 제안하는 또 다른 방법이있다. 상기와 같은 예를 복용 :
(compile in Compile) := { val w = wsdlImport.value val c = (compile in Compile).value // you can add more tasks to composition or perform some actions with them c }
첫 번째 예는 나를 위해로서, 비트 깔끔한을 보이지만 그것은, 어떤 경우에는 더 많은 유연성을 제공하는 것 같은 느낌이 든다.
SBT 1.2.3에서 테스트하지만,뿐만 아니라 다른 1.x에서 함께 작동합니다.
from https://stackoverflow.com/questions/7820939/run-custom-task-automatically-before-after-standard-task by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크 DataFrame에 널 (null) 값을 교체 (0) | 2019.11.09 |
---|---|
[SCALA] 어떤 구성 설정은 키 'akka.version'을 찾을 수 없습니다 (0) | 2019.11.09 |
[SCALA] 왜 하나는 해시 대신 점으로 스칼라 형 멤버를 선택 하는가? (0) | 2019.11.09 |
[SCALA] 스칼라 케이스 클래스에 업데이트 작업 (0) | 2019.11.09 |
[SCALA] 두 목록의 직교 제품 (0) | 2019.11.09 |