2016-10-17 2 views
2

SBT에서 일부 로그인하고 싶습니다. 을 초기화 할 때 streams을 얻으려고했습니다. 그러나 컴파일러는 A setting cannot depend on a task을 불평합니다.SBT에 settingKey에 로그인하는 방법?

구성 스 니펫은 여기에 있습니다.

val appConfig = settingKey[Config]("The parsed application.conf in SBT") 

appConfig := { 
    // ... 
    streams.value.log.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 

settingKey에 로그인하는 방법이 있습니까? 감사.

+0

[sbt 설정 초기화 중 스트림으로 인쇄하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/33765889/how-to-print-to-stream-during-sbt-setting-initialization) – Caoilte

답변

2

설정은 설정 가능한 데이터 또는 다른 설정에서 직접 계산할 수있는 값만을 유지해야합니다. streams은 작업이므로 다른 작업을 설정하고 appConfig 설정을 적용 할 수 있습니다. 예를 들어 :

val appConfig = settingKey[File]("application.conf file") 
val parsedAppConfig = taskKey[Config]("The parsed application.conf in SBT") 

parsedAppConfig := { 
    // ... 
    parse(appConfig.value) 
    // ... 
    streams.value.log.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 
0

그것은 주위 streams 가서 직접 새 ConsoleLogger()을 만들 수 있습니다.

val appConfig = settingKey[Config]("The parsed application.conf in SBT") 

appConfig := { 
    // ... 
    val logger: Logger = ConsoleLogger() 
    logger.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 

경고 : streams.value.logConsoleLogger 이외로 설정됩니다 경우, 로그 문을 망각하고 여전히 콘솔에 기록합니다. 그것은 당신의 목적에 받아 들여질 수 있습니다.