java - 为什么我无法从脚本执行我的 java 项目?

标签 java jar cygwin sh executable-jar

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

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

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

的类

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

Error: Could not find or load main class com.example.Launcher

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

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

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

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

有什么想法吗?

旁注
我通过 CygWin 运行它

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

即使进行了更改,问题仍然存在于我的 Windows 计算机上。

第三个​​旁注
问题又出现在 CygWin 中的 sh 上,我的最终解决方案是这样的:

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

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

最佳答案

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

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

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

关于java - 为什么我无法从脚本执行我的 java 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937855/

相关文章:

java - log4j2和syslog,使用RFC5424格式不显示日志消息的varargs部分

java - 我想从 android studio 中的 SQ-lite 检索数据,以便在两个条目后打印 4 个随机条目和 "or"

java - 如何让一个组件占据GridBagLayout中的所有可用空间?

Java - 内存使用和多个 jar 实例

powershell - 替换两个特定字符串之间的行 - 在 cmd 中等效于 sed

java - 如何知道通用路径是直线还是曲线?

android - Maven 中的传递 AAR 依赖项

java - 创建 2 个可运行的 JAR,它们使用相同的库而不需要它们两次

在 Windows 系统上未检测到 Cygwin shell

C 编程练习 : prime numbers in an array, 使用 for 循环打印