我正在尝试通过命令行运行Java程序Beast beast = new Beast(beastSpeed);
Hero hero = new Hero(heroSpeed, beast);
boolean isHeroFaster = hero.isMoreFast();
。通过Maven指定了几个依赖项。
在包含TopicPublisher.java
文件的目录中,我运行了以下命令:pom.xml
,mvn clean
和mvn package
。
我收到以下错误:
java -cp target/SOM_Enrichment-1.0-SNAPSHOT.jar TopicPublisher
下面是我的目录树的屏幕截图:
有什么办法解决这个问题吗?
[编辑]
Pom文件:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: om/solacesystems/jcsmp/JCSMPStreamingPublishEventHandler
http://maven.apache.org/xsd/maven-4.0.0.xsd“> 4.0.0
<?xml version="1.0" encoding="UTF-8"?>
答案 0 :(得分:2)
我没有看到完整的POM.xml
,我假设您尚未将最终的工件构建为“胖子”。我的意思是说JAR不仅包含您自己的类,而且还包含所有第三方依赖项。
您需要使用Maven assembly plugin或Maven shade plugin之类的东西来为您执行此操作。从屏幕快照中,尽管我看到您正在使用IntelliJ,所以您显然还应该能够通过IDE运行,仅用于测试目的。
答案 1 :(得分:2)
您的程序从com.solacesystems
中的pom.xml
依赖项中加载类,但是您的类路径仅包含构建工件jar。按照@Kerry的建议,构建一个胖jar,或使用exec-maven-plugin从命令行运行。从项目目录(执行mvn package
的位置)中,执行:
mvn exec:java -Dexec.mainClass=TopicPublisher
该插件根据pom中定义的依赖项构建classpath参数。有关更多选项,请参见https://www.mojohaus.org/exec-maven-plugin/。