加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用SBT的类路径创建脚本

发布时间:2020-12-16 21:33:29 所属栏目:安全 来源:网络整理
导读:我想让SBT创建一个文件,并为特定阶段编写项目的运行时完整类路径( scala,托管和非托管的lib,项目类)(在这种情况下,仅用于编译). 我正在使用maven-antrun-plugin来复制我用Maven做的一些事情: build plugins plugin groupIdorg.apache.maven.plugins/groupId
我想让SBT创建一个文件,并为特定阶段编写项目的运行时完整类路径( scala,托管和非托管的lib,项目类)(在这种情况下,仅用于编译).

我正在使用maven-antrun-plugin来复制我用Maven做的一些事情:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.6</version>
      <executions>
        <execution>
          <id>generate-runner</id>
          <phase>package</phase>
          <configuration>
            <target>
              <property name="runtime_classpath" refid="maven.runtime.classpath" />
              <property name="runtime_entrypoint" value="com.biasedbit.webserver.Bootstrap" />

              <echo file="../../bin/run-server.sh" append="false">#!/bin/sh
java -classpath ${runtime_classpath} ${runtime_entrypoint} $$*
              </echo>
            </target>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

如何用SBT这样做?

解决方法

David的答案是正确的.有一些小的方法可以改进.可以直接使用java启动器,因为Scala库包含在类路径中.如果只有一个定义,sbt可以自动检测主类. sbt还有一些可以使文件更容易处理的方法,例如 sbt.IO中的实用程序方法.

TaskKey[File]("mkrun") <<= (baseDirectory,fullClasspath in Runtime,mainClass in Runtime) map { (base,cp,main) =>
  val template = """#!/bin/sh
java -classpath "%s" %s "$@"
"""
  val mainStr = main getOrElse error("No main class specified")
  val contents = template.format(cp.files.absString,mainStr)
  val out = base / "../../bin/run-server.sh"
  IO.write(out,contents)
  out.setExecutable(true)
  out
}

这可以直接进入你的build.sbt.或者,单独定义密钥,并将其放在项目/ Build.scala中:

import sbt._
import Keys._

object MyBuild extends Build {
  val mkrun = TaskKey[File]("mkrun")
  lazy val proj = Project("demo",file(".")) settings(
    mkrun <<= ... same argument as above ...
  )
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读