2

我做了一个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

为什么我会收到这些错误。我如何在 linux 上运行它?请帮忙

谢谢

4

4 回答 4

3

您需要在 linux 环境中使用:而不是在类路径中。;假设你有正确放置罐子,然后简单地改变这个:

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

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

应该管用

在此处了解有关设置类路径的更多信息:http: //docs.oracle.com/javase/tutorial/essential/environment/paths.html

于 2013-08-15T12:35:16.643 回答
2

分号使 Bash 调用没有类路径的 java 命令,然后尝试直接执行每个 jar,寻找不存在的 shebang。这会导致 JAR 标头作为错误的一部分打印。

在 Linux 上用于:分隔 jar 而不是分号。

于 2013-08-15T12:35:47.357 回答
0

您需要进行两项更改:

  1. 首先,类路径分隔符是 ':' 而不是 ';' 在 Linux 上
  2. 其次,您需要使用反斜杠 ('\') 转义通配符,否则 shell 会将其展开并搞砸。您希望 Java 看到 '*' 字符并自行扩展它。Windows shell 不会在命令行上扩展通配符,所以这不是问题。

所以,总的来说,你会想要使用类似的东西

java -cp .:../dependency-jars/\*:  com.softech.ls360.integration.BatchImport vintners
于 2013-08-15T12:38:14.680 回答
0

您应该使用 : 而不是 ; 作为类路径文件的分隔符。

于 2013-08-15T12:38:21.670 回答