【问题标题】:SBT equivalent of Ant target相当于 Ant 目标的 SBT
【发布时间】:2012-10-10 23:51:59
【问题描述】:

Ant 目标的 SBT 等效项(如果有)是什么?例如,Ant 的 build.xml 文件中的 sn-p 将是:

<target name="runClient" description="run client">
    <java classname="client.Client" fork="true">
        <jvmarg value="-Djava.rmi.server.codebase=${client_web_codebase}"/>
        <jvmarg value="-Djava.security.policy=policy"/>
        <arg value="localhost"/>
        <classpath>
            <pathelement location="dist/client.jar"/>
        </classpath>
    </java>
</target>

然后我会做类似ant runClient 的操作来启动应用程序“client.Client”,并使用 XML 中指定的 jvmargs .. 是否有 SBT 等效项,或者 SBT 挂钩到 Ant 来执行此操作的方法?

【问题讨论】:

    标签: scala ant sbt target


    【解决方案1】:

    您可以使用Sbt Tasks 来执行此操作。您定义的任务可以依赖于其他任务和/或设置(例如,您的项目基目录):

    import sbt._
    import Keys._
    
    object TestBuild extends Build {
      lazy val runClient = TaskKey[Unit]("runClient", "run client")
    
      lazy val root = Project("Test", file("."),
        settings = Defaults.defaultSettings ++ Seq(
        runClient <<= baseDirectory map {
          base =>
            val clientWebCodebase = base / "yourpath"
            val opts = Seq("-Djava.rmi.server.codebase=" + clientWebCodebase,
              "-Djava.security.policy=policy",
              "-cp", "dist/client.jar",
              "client.Client", "localhost"
            )
            Fork.java.fork(None, opts, None, Map(), false, StdoutOutput)
          }
        )
      )
    }
    

    拥有这样的任务定义,您可以使用以下任一方式运行它:

    sbt runClient
    

    或在 sbt shell 中:

    >runClient
    

    你甚至可以使用 Tab 补全:runC + tab :)

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 2011-07-04
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多