簡體   English   中英

為什么我可以通過將路徑指定為參數而不是通過在path變量中永久設置路徑來運行Maven打包的文件?

[英]Why can I run this file packaged by Maven by specifying the path as argument but not by setting the path permanently in my path variable?

因此,我試圖運行以下命令:

java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology

要在./storm/starter/中運行ExclamationTopology類,但是它不起作用。

然后有人建議我將命令更改為此:

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)

您需要將風暴依賴項添加到您的類路徑中-當前不包含它,因為在m2-pom.xml中將其標記為“已提供”,將其更改為“編譯”:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM