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

时间:2013-08-15 12:34:11

标签: 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

工作正常。我的依赖jar文件夹包含这些jar文件

dependency-jars

现在我从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 个答案:

答案 0 :(得分:3)

您需要在linux envrionment的classpath中使用:而不是;。假设您正确放置了罐子,那么只需更改它:

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

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

应该有效

在此处详细了解如何设置classpath:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您需要进行两项更改:

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

    这样的东西
    java -cp .:../dependency-jars/\*:  com.softech.ls360.integration.BatchImport vintners
    

答案 3 :(得分:0)

你应该使用:而不是;作为类路径文件的编写者。