【发布时间】:2020-05-25 02:34:03
【问题描述】:
出于测试目的,我有一个帮助程序对象,它在代码中启动一个本地 AWS DynamoDB 实例。 Java 代码的结构如下所示:
dynamodbtestutil\
- dynamodb_local_latest\
- - DynamoDBLocal.jar
- - DynamoDBLocal_lib\
主类在DynamoDBLocal.jar,所有库类都在DynamoDBLocal_lib。
该命令通过以下 Go 代码执行:
path, _ := os.Getwd()
classPath := fmt.Sprintf("%s\\dynamodb_local_latest", path)
libraryPathArg := fmt.Sprintf("\"-Djava.library.path=%s\\DynamoDBLocal_lb\"", classPath)
cmd := exec.Command("java", "-cp", fmt.Sprintf("\"%s\"", classPath), libraryPathArg, "-jar", "DynamoDBLocal.jar", "-port", strconv.FormatInt(port, 10), "-inMemory", "-sharedDb")
cmd.Path = "java"
但是,由于 Java 找不到库路径,我无法让它工作。我得到的输出如下:
命令:java "-Djava.library.path=****\pkg\dynamodbtestutil\dynamodb_local_latest\DynamoDBLocal_lb" -jar DynamoDBLocal.jar -port 8000 -inMemory -sharedDb
输出:错误:无法找到或加载主类“-Djava.library.path=*****\pkg\dynamodbtestutil\dynamodb_local_latest\DynamoDBLocal_lb”
注意:插入 * 代替实际路径。
这显然是我如何格式化命令的问题,但我不确定这应该如何工作,因为我对 JRE 不够熟悉,无法弄清楚这些值应该是什么。
【问题讨论】:
-
Java 是否需要像这样引用它的参数:
"\"-Djava.library.path=%s\\DynamoDBLocal_lb\""?我认为libraryPathArg中的那些内部\"正在破坏它。我只是在评论,因为我对 Java 及其解释器不够了解。 -
这是特定于 Windows 和特定参数的问题。我试过不带引号,但它确实坏了。
-
@blami 实际上,你是对的。如果从 shell 调用,则需要引号,但如果从代码调用,则会导致错误。