Java 为什么我可以通过将path指定为参数而不是在path变量中永久设置path来运行这个由Maven打包的文件?

Java 为什么我可以通过将path指定为参数而不是在path变量中永久设置path来运行这个由Maven打包的文件?,java,maven,path,maven-2,Java,Maven,Path,Maven 2,所以,我试图运行这个命令: java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology 在./storm/starter/中运行EquiremationTopology类,但它不起作用 然后,SO建议我将命令更改为: java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-depende

所以,我试图运行这个命令:

java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology
在./storm/starter/中运行EquiremationTopology类,但它不起作用

然后,SO建议我将命令更改为:

java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar:/Users/xxx/storm-0.8.2/storm-0.8.2.jar:/Users/xxx/storm-0.8.2/lib/*:/Users/xxx/storm-0.8.2/conf/s torm.yaml storm.starter.ExclamationTopology
它成功了。所以我认为我只需要将这些路径添加到path变量中就可以了,所以我改变了我的路径,这就是它现在的样子:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/xxx/storm-0.8.2/storm-0.8.2.jar:/Users/xxx/storm-0.8.2/lib/*:/Users/xxx/storm-0.8.2/conf/s​torm.yaml
但我仍然无法运行第一个命令。谁能告诉我为什么? 我基本上想要的是运行第一个命令;它只是需要设置正确的路径,对吗?我相信这正是我所做的

编辑:

这是第一个命令中返回的错误:

$ java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology
Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/topology/IRichSpout
Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

您需要将storm依赖项添加到类路径中-它当前未包含,因为它在m2-pom.xml中标记为“提供”,请将其更改为“编译”:

<dependency>
<groupId>storm</groupId>
<artifactId>storm</artifactId>
<version>0.8.2</version>
<scope>compile</scope>
</dependency>

暴风雨
暴风雨
0.8.2
编译

第一个命令返回了什么错误?系统路径和Java类路径是两个不同的东西。系统二进制文件位于第一个和第二个Java类文件中。@ChrisGerken您回答了我昨天链接到的同一个问题。无论如何,我已经添加了错误。@jeppi,好吧,等等,让我查一下。这和maven有什么关系?你在回答另一个问题,这个问题几个月前就已经回答了。