登录
首页 >  Golang >  Go问答

在 Golang 中设置 Java 命令的类路径和库路径

来源:stackoverflow

时间:2024-02-25 20:48:27 225浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《在 Golang 中设置 Java 命令的类路径和库路径》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

出于测试目的,我有一个帮助程序对象,用于在代码中启动本地 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 不够熟悉,无法弄清楚这些值应该是什么。


解决方案


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

  1. 通过将 cmd.path 设置为“java”,我告诉 go 我希望命令在本地运行,而不是从 path for java 中的条目运行。因此,我不需要 .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"

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>