【问题标题】:Why can I not execute my java project from a script?为什么我不能从脚本执行我的 java 项目?
【发布时间】:2015-10-05 04:34:23
【问题描述】:

我正在开发一个包含许多 module jar 文件的项目,其中一个包含我的主类;我正在尝试编写一个 shell 脚本来设置类路径,然后启动应用程序;这是我的脚本。

#!/bin/sh
java -cp "modules/*;lib/*" com.example.Launcher

在本例中,com.example.Launcher 是包含 public static void main(String[] args)...的类...

我面临的问题是,当我通过./myscript 执行我的脚本时,我给出了输出

错误:无法找到或加载主类 com.example.Launcher

这很简单,类路径有问题吗?

但是如果我直接从命令行执行

java -cp "modules/*;lib/*" com.example.Launcher

脚本中的完全相同的命令,在脚本所在的目录中,一切正常。

有什么想法吗?

旁注
我通过 CygWin 运行它

另一个旁注
这可能是 CygWin 中的 sh 的问题。我将此构建复制到 CentOS 机器并尝试执行它,将; 更改为允许从脚本执行的:

即使进行了更改,问题仍然存在于我的窗口机器上。

第三个​​旁注
再次出现问题在于 CygWin 中的 sh,我的最终解决方案是:

launcher.sh 将使用类路径中的 : 调用 java

launcher.bat 将在类路径中使用 ; 调用 java

【问题讨论】:

  • 不确定命令行执行的原因,但尝试使用':'作为路径分隔符。

标签: java jar cygwin sh executable-jar


【解决方案1】:

在类 Unix 系统上,分隔符是 :(不是 ;)。改变

java -cp "modules/*;lib/*" com.example.Launcher

java -cp "modules/*:lib/*" com.example.Launcher

【讨论】:

  • 我认为问题出在 CygWin 上的 sh 上。我尝试在具有此更改的 CentOS 机器上运行构建,并且从脚本执行它工作正常,但在我的 Windows 机器上仍然无济于事:/
  • 如果您使用的是 Windows,请使用 powershell、bat 或 cmd 脚本。 Cygwin 通过 posix 兼容层调用(可能是个问题)。
  • Hmmmm,所以我认为问题在于通过 CygWin 中的 sh 运行它,我现在有一个将使用 :.sh在类路径中,以及将使用 ;.bat,现在一切看起来都很好;干杯。
猜你喜欢
  • 2011-01-03
  • 2021-04-29
  • 2021-12-30
  • 2013-09-13
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2014-12-06
相关资源
最近更新 更多