gpt4 book ai didi

java - 使用 Golang 中的类路径和库路径运行 Java 命令

转载 作者:行者123 更新时间:2023-12-01 16:34:12 25 4
gpt4 key购买 nike

出于测试目的,我有一个帮助程序对象,用于在代码中启动本地 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 找不到库路径。我得到的输出如下:

Command: java "-Djava.library.path=****\pkg\dynamodbtestutil\dynamodb_local_latest\DynamoDBLocal_lb" -jar DynamoDBLocal.jar -port 8000 -inMemory -sharedDb

Output: Error: Could not find or load main class "-Djava.library.path=*****\pkg\dynamodbtestutil\dynamodb_local_latest\DynamoDBLocal_lb"

注意:插入 * 来代替实际路径。

这显然是我如何格式化命令的问题,但我不确定这应该如何工作,因为我对 JRE 不够熟悉,无法弄清楚这些值应该是什么。

最佳答案

所以,我在这里找到了我的问题。有两个主要问题:

  1. 通过将 cmd.Path 设置为“java”,我告诉 Go 我希望命令在本地运行,而不是从 Java 的 PATH 条目中运行。因此,我不需要 .jar 文件目录的完全限定路径。
  2. 即使在本地运行,代码也存在于 dynamodbtestutil\ 目录中,因此我需要提供 classpath 参数。不过,“dynamodb_local_latest”的值就足够了。
  3. -jar 参数的值也需要以此路径为前缀。
  4. -Djava.library.path 的值也需要以此路径为前缀
  5. -Djava.library.path 参数不应位于引号内。

代码现在看起来像这样:

cmd := exec.Command("java", "-classpath", "dynamodb_local_latest", "-Djava.library.path=dynamodb_local_latest\\DynamoDBLocal_lb", "-jar", "dynamodb_local_latest\\DynamoDBLocal.jar",
"-port", strconv.FormatInt(port, 10), "-inMemory", "-sharedDb")
cmd.Path = "java"

关于java - 使用 Golang 中的类路径和库路径运行 Java 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61994914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com