2013-05-20 2 views
1

Я разрабатываю an sbt launched application с пользовательскими command line interface. Проблема в том, что каждый раз, когда я хочу ее протестировать, мне нужно удалить ранее опубликованный каталог boot, а затем перекомпилировать и опубликовать локально артефакты, а затем, наконец, запустить приложение и протестировать его вручную. Часть этого достигается за счет запуска внешних сценариев оболочки.Возможно ли перезапустить и протестировать xsbti.AppMain производное приложение от sbt?

Как я могу сделать sbt, выполняя эту работу для меня? Я уже сделал скелет команды для него:

lazy val root = Project(
    id  = "app", 
    base  = file("."), 
    settings = buildSettings ++ Seq(resolvers := rtResolvers, 
     libraryDependencies ++= libs, 
     scalacOptions ++= Seq("-encoding", "UTF-8", "-deprecation", "-unchecked"), 
     commands ++= Seq(launchApp)) 
) 


    val launchApp = Command.command("launch") { state => 
    state.log.info("Re-launching app") 
    state 
    } 

ответ

0
  1. Создать launcher configuration файл, например fqb.build.properties в главном каталоге проекта.

  2. Создать скрипт, который запускает приложение

    #!/usr/bin/env bash 
    
    java -jar /path/to/sbt-launch.jar "[email protected]" 
    
  3. Определить задачи и команду:

    lazy val launcherTask = TaskKey[Unit]("launch", "Starts the application from the locally published JAR") 
    
    lazy val launchApp: Seq[Setting[_]] = Seq(
        commands += Command.command("publish-launch") { state => 
        state.log.info("Re-launching app") 
        val modulesProj = modules.id 
        s"$modulesProj/publishLocal" :: 
         "publishLocal" :: 
         launcherTask.key.label :: 
         state 
        }, 
        launcherTask := { 
        "launch @fqb.build.properties" !< 
        } 
    ) 
    
  4. Добавить его в качестве параметра для проекта:

    lazy val root = Project(
        id  = "app", 
        base  = file("."), 
        settings = buildSettings ++ Seq(resolvers := rtResolvers, 
         libraryDependencies ++= libs, 
         scalacOptions ++= Seq("-encoding", "UTF-8", "-deprecation", "-unchecked"), 
         launchApp) 
    ) 
    

Не забудьте удалить старый каталог ~/.<app_name> при повторном развертывании, чтобы изменения вступили в силу.

Смежные вопросы