当前位置: 首页 > 知识库问答 >
问题:

JVM选项未传递给分叉进程

裴畅
2023-03-14

根据文档,sbt 分叉进程应接收当前进程的 jvm 设置:

默认情况下,分叉的进程使用与当前进程的构建、工作目录和JVM选项相同的Java和Scala版本。参见:http://www.scala-sbt.org/0.13/docs/Forking.html

然而,对我来说似乎不是这样。参加以下测试:

object Test {

        def main(args: Array[String]): Unit = {

                println("Conf: " + System.getProperty("config.resource"))
        }
}

如果我使用sbt-Dconfig.resource=test来运行它。然后打印“conf:test.conf”。但一旦我在run中添加了fork:=在我的构建中为true。scala“Conf:null”被打印出来。这对我来说意味着jvm选项实际上没有传递给分叉进程。有人能告诉我我错过了什么吗?

import sbt._
import Keys._

object Build extends Build {
        lazy val root = (project in file(".")).
        settings(
        fork in run := true
        )
}

共有3个答案

富凯风
2023-03-14

如果您要求sbt为运行代码的虚拟机分叉,那么它不会继承父虚拟机的系统属性

fork in run := true

fork in console := true

javaOptions in run += s"-Dconfig.resource=${Option(System.getProperty("config.resource")).getOrElse("default")}"

javaOptions in console += s"-Dconfig.resource=${Option(System.getProperty("config.resource")).getOrElse("default")}"

这对我有用...

姜志
2023-03-14

这是我用过的。这是< code>josephpconley答案的更新版本。

  javaOptions ++= {
    val props = sys.props.toList
    props.map {
      case (key, value) => s"-D$key=$value"
    }
  },
郎雅昶
2023-03-14

SBT文档是正确的,JVM属性确实会传递给分叉进程。但是,您关心的是需要手动传递的系统属性。尝试此操作以传递所有系统属性:

import scala.collection.JavaConversions._

javaOptions in run += {
  val props = System.getProperties
  props.stringPropertyNames().toList.map { configKey =>
    s"-D$configKey=${props.getProperty(configKey)}"
  }.mkString(" ")
}
 类似资料:
  • 问题内容: 我正在开发与远程主机进行通信的简单Spring Web应用程序,我想在公司代理之后在本地对其进行测试。我使用“ Spring Boot” gradle插件,问题是 如何为JVM指定代理设置? 我尝试了几种方法来做到这一点: 但是似乎它们都不起作用-“ NoRouteToHostException”抛出“网络”代码。另外,我添加了一些额外的代码来调试JVM启动参数: 并且仅打印一个参数:

  • 我正在尝试使用以下命令提交flink关于纱线的作业: 我拿到了env。Java语言选择flink客户端日志,但当应用程序提交到Thread时,这些Java选项将不可用。由于额外的JVM选项不可用,应用程序在连接zookeeper时引发异常。 请建议如何将动态属性传递给JM 注意:我试图设置env。Java语言将选项选择到conf/flink-conf.yaml及其工作状态。我需要一种通过flink

  • 我正在开发与远程主机通信的简单Spring web应用程序,我想在公司代理后对其进行本地测试。我使用“Spring Boot”gradle插件,问题是如何为JVM指定代理设置? 我试过几种方法: 如果在代码中设置系统属性: 一切正常!

  • 我有一些JMH基准测试,我正在尝试分析。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道JMH在分叉的JVM中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用断续器。

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0日志= / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sync_

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0 log = / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sy