【发布时间】:2020-02-25 13:14:41
【问题描述】:
几个月前,我创建了一个小的 Gradle 插件,可以在后台启动一个 Java 应用程序。虽然这在过去工作得很好,但现在已经不行了,我很困惑为什么它不能。
启动器在 Windows 下似乎工作正常,但在 Linux 下却失败了。当它尝试运行有问题的命令时:
/home/aris.kourtesas/.sdkman/candidates/java/8.0.242.hs-adpt/jre/bin/java -cp "/home/aris.kourtesas/Projects/marketing-server/classes:/home/aris.kourtesas/Projects/marketing-server/classes/*" -XX:+UseParallelGC -Dads.net.port=17770 -Dads.db.user=marketing_int -Dads.db.pwd=marketing_int -Dads.marketing fts.marketing.server.WebServer
它失败并出现以下错误:
Error: Could not find or load main class fts.marketing.server.WebServer
但是,当我复制粘贴命令并直接在 shell 上运行它时,它工作得很好。我很困惑,说实话我不知道我应该做什么。所有文件都存在并且类路径正确但它说找不到我试图调用的主类。
供参考,这是创建启动命令的代码:
if (isWindows()) {
builder.append("CMD /C START /B ")
}
builder.append(java() + " -cp " + classpath() +
" -XX:+UseParallelGC " +
"-Dads.net.port=${MARKETING_IT_APPSERVER_PORT} " +
"-Dads.db.user=${MARKETING_IT_DB_USERNAME} " +
"-Dads.db.pwd=${MARKETING_IT_DB_PASSWORD} " +
"-Dads.marketing " +
(MARKETING_IT_DB_HOST ? "-Dads.db.host=${MARKETING_IT_DB_HOST} " : '') +
(MARKETING_IT_USER_HOME ? "-Duser.home=${MARKETING_IT_USER_HOME} " : '') +
"fts.marketing.server.WebServer")
if (!isWindows()) {
builder.append(" &")
}
这是创建和启动相关过程的代码部分:
private def static createProcess(String directory, String command) {
new ProcessBuilder(command.split(' '))
.redirectErrorStream(true)
.directory(Paths.get(directory).toFile())
.start()
}
你能解释一下吗?
【问题讨论】:
标签: java gradle groovy process processbuilder