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 ... ) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |