2017-02-28 143 views
-1

当我运行下面的一切工作正常:在命令行中传递user.dir时,执行java jar文件时出错?

# WORKS CORRECTLY 
java -jar target/example.jar  

# GIVES AN ERROR 
java -Duser.dir="/webapp" -jar target/example.jar 

错误输出是:

Error: Could not find or load main class com.module.Main 

我使用的Java 7

我的清单文件在罐子正确配置文件包含“Main-Class:com.module.Main”

我找不到解释为什么发生这种情况。

+0

'user.dir'是当前工作目录,但设置它不会*改变当前工作目录。 – EJP

回答

0

确保软件包名称在您的课堂上正确与主。 如果您的源代码集是自定义的,IDE将使用main.java修改您的软件包。 etc

+0

我没有使用IDE。我从命令行运行。 “java -jar target/example.jar”正确执行jar文件,它只有在我设置“user.dir”时才会发出错误。 –

+0

我明白了。但有时当你设置你的src dir作为源代码并创建一个类时,main/java实际上是一个包,当在IDE中创建一个类时,它会自动将它放在顶部,并且你期望com.module.Main但它实际上是main.java.com.module.Main - 即时尝试帮助这里:)简单的提示,但值得检查我被抓了近一个小时。 – LazerBanana

0

设置user.dir会更改您的工作目录,因此它会尝试查找可运行类的位置。因此,通过更改您的工作目录,它不能再在预期位置找到该类。你可以通过设置你的user.dir为“。”来测试。它会工作。

+0

设置'user.dir'确实*不*改变你当前的工作目录,'.'实际上是默认的。 – EJP

+0

请参阅http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html,是的,这是我的观点。如果它不改变它,那么你如何解释所描述的问题? – RobP

+0

是的,我试图将user.dir设置为“。”。现在它的工作。 –

-1

user.dir是java的当前工作目录。在这里,你要求它从/ webapp运行一些东西,但是你的jar在不同的位置。

+0

不,它不抱怨没有找到jar文件,它抱怨“无法找到或加载主类com.module.Main” –