복붙노트

[SCALA] 어떻게 SBT 명령 내부 설정을 변경하려면?

SCALA

어떻게 SBT 명령 내부 설정을 변경하려면?

나는 (설정 명령의 실행시 계산되어야 함) 수정 된 버전의 설정으로 게시 작업을 실행 할 명령 게시 스냅 샷을 갖고 싶어.

나는 버전 내부 명령의 현재 값을 얻고, Project.runTask하는 방법을 알아 냈 ( "범위"를 "작업", ...) 게시 작업을 호출하기위한 옳은 것 같다.

나는 혼동 해요있는 유일한 것은 새 버전 값을 주 인스턴스를 수정하는 방법입니다. 내 모든 시도는 원래 버전 설정으로 아무것도하지 않는 것 같다.

내 마지막 시도 :

val printVers = TaskKey[Unit]("printvers")
val printVersTask = TaskKey[Unit]("printvers") <<= {version map println}

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val newState = SessionSettings.reapply(state.get(sessionSettings).get.appendRaw(version := "???"), state)
  Project.runTask(printVers in Compile, newState, true)

  state
}

lazy val root = Project("main", file("."),
                        settings =
                          Defaults.defaultSettings ++
                          Seq(printVersTask)).settings(commands += publishSnapshot)

이 문제를 해결하기 위해 어떤 방법이 있나요?

해결법

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

    1.이것은 실제로 나를 위해 작동하지 않았다. 나는 SBT의 0.13.7을 사용하고 있습니다

    이것은 실제로 나를 위해 작동하지 않았다. 나는 SBT의 0.13.7을 사용하고 있습니다

    나는 위의 예에해야 할 일을했을 무엇 적응, 내가 좋아하는 뭔가를해야했다 :

    def publishSnapshot = Command.command("publish-snapshot") { state =>
      val extracted = Project extract state
      val newState = extracted.append(Seq(version := "newVersion"), state)
      val (s, _) = Project.extract(newState).runTask(publish in Compile, newState)
      s
    }
    

    또는 대안 수행

    def publishSnapshot = Command.command("publish-snapshot") { state =>
      val newState =
        Command.process("""set version := "newVersion" """, state)
      val (s, _) = Project.extract(newState).runTask(publish in Compile, newState)
      s
    }
    
  2. ==============================

    2.SBT 메일 링리스트의 도움으로, 나는 다음과 같은 솔루션을 만들 수 있었다 :

    SBT 메일 링리스트의 도움으로, 나는 다음과 같은 솔루션을 만들 수 있었다 :

    def publishSnapshot = Command.command("publish-snapshot") { state =>
      val extracted = Project extract state
      import extracted._
      val eVersion = getOpt(version).get // getting current version
      runTask(publish in Compile,
        append(Seq(version := "newVersion"), state),
        true
      )
      state
    }
    
  3. ==============================

    3.명령에서 임의의 설정을 업데이트하려면 다음과 같은 작업을 수행합니다

    명령에서 임의의 설정을 업데이트하려면 다음과 같은 작업을 수행합니다

    def updateFoo = Command.command("updateFoo") { state =>
     val extracted = Project extract state
     import extracted._
     println("'foo' set to true")
     //append returns state with updated Foo
     append(Seq(foo := true), state)
    }
    
  4. from https://stackoverflow.com/questions/14262798/how-to-change-setting-inside-sbt-command by cc-by-sa and MIT license