Java 在linux上运行程序时出错。在windows上,它工作正常

Java 在linux上运行程序时出错。在windows上,它工作正常,java,linux,classpath,Java,Linux,Classpath,我做了一个java程序。我使用了eclipse,它是一个maven项目。现在,当我从windows命令提示符运行该程序时,它运行正常。下面是我如何在windows命令提示符下运行它 D:\Personal Work\eclipse 32 Bit\workspace\....\target\classes> java -cp ".;..\dependency-jars\*" com/softech/ls360/integration/BatchImport vintners 它工作得很好

我做了一个java程序。我使用了eclipse,它是一个maven项目。现在,当我从windows命令提示符运行该程序时,它运行正常。下面是我如何在windows命令提示符下运行它

D:\Personal Work\eclipse 32 Bit\workspace\....\target\classes>
java -cp ".;..\dependency-jars\*"  com/softech/ls360/integration/BatchImport vintners
它工作得很好。我的依赖项jar文件夹包含这些jar文件

现在,当我在linux上运行相同的程序时。这就是我的跑步方式

root@Basit:/home/test/script/classes# java -cp .;../dependency-jars/*;  com.s
oftech.ls360.integration.BatchImport vintners
然后我得到了

....
-javaagent:<jarpath>[=<options>]
              load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
              show splash screen with specified image
../dependency-jars/commons-collections-3.2.1.jar: line 1: PK??: command not found
../dependency-jars/commons-collections-3.2.1.jar: line 2:
../dependency-jars/commons-collections-3.2.1.jar: line 2: ?8: command not found
../dependency-jars/commons-collections-3.2.1.jar: line 3: syntax error near unex
pected token `)'
../dependency-jars/commons-collections-3.2.1.jar: line 3: ?     ¶META-INF/MANIFE
ST.MF?VKo
     _¦?z?  ?%+v?N??!ö!P@
                         (
                          _?o.5?$
com.softech.ls360.integration.BatchImport: command not found
。。。。
-javaagent:[=]
加载Java编程语言代理,请参阅Java.lang.instrument
-飞溅:
用指定的图像显示启动屏幕
../dependency-jars/commons-collections-3.2.1.jar:未找到第1行:PK???:命令
../dependency-jars/commons-collections-3.2.1.jar:第2行:
../dependency-jars/commons-collections-3.2.1.jar:第2行:?8:未找到命令
../dependency-jars/commons-collections-3.2.1.jar:第3行:unce附近的语法错误
预期代币“)”
../dependency-jars/commons-collections-3.2.1.jar:第3行:?^META-INF/MANIFE
圣马夫科酒店
_阿尔法?z???%+v?N??!ö!P@
(
_?o.5$
com.softech.ls360.integration.BatchImport:未找到命令
为什么会出现这些错误。如何在linux上运行它?请帮助


谢谢

您需要在linux环境的类路径中使用
而不是
。假设您已正确放置JAR,只需更改此项:

java -cp .;../dependency-jars/*;  com.s
oftech.ls360.integration.BatchImport vintners

应该有用


了解有关在此处设置类路径的更多信息:

分号使Bash在没有类路径的情况下调用java命令,然后尝试直接执行每个jar,在没有类路径的情况下查找一个shebang。这导致jar头作为错误的一部分被打印出来


在Linux上使用
分隔JAR而不是分号。

您需要进行两项更改:

  • 首先,在Linux上,类路径分隔符是“:”而不是“;”
  • 其次,您需要用反斜杠(“\”)转义通配符,否则shell会将其展开并将事情搞砸。您希望Java看到“*”字符并将其本身展开。Windows shell不会在命令行上展开通配符,因此这不成问题
  • 所以,总的来说,你会想用

    java -cp .:../dependency-jars/\*:  com.softech.ls360.integration.BatchImport vintners
    

    您应该使用:而不是;作为类路径文件的执行器

    java -cp .:../dependency-jars/\*:  com.softech.ls360.integration.BatchImport vintners