通过命令行使用mvn运行Java程序

通过命令行使用mvn运行Java程序,java,maven,Java,Maven,我正试图通过命令行运行我的java程序TopicPublisher.java。有几个依赖项是通过Maven指定的 在包含pom.xml文件的目录中,我运行了以下命令:mvnclean、mvnpackage和java-cp target/SOM_enrication-1.0-SNAPSHOT.jar TopicPublisher 我得到以下错误: 错误:发生JNI错误,请检查您的安装并重试 线程“main”java.lang.NoClassDefFoundError中出现异常:om/solaces

我正试图通过命令行运行我的java程序
TopicPublisher.java
。有几个依赖项是通过Maven指定的

在包含
pom.xml
文件的目录中,我运行了以下命令:
mvnclean
mvnpackage
java-cp target/SOM_enrication-1.0-SNAPSHOT.jar TopicPublisher

我得到以下错误:

错误:发生JNI错误,请检查您的安装并重试
线程“main”java.lang.NoClassDefFoundError中出现异常:om/solacesystems/jcsmp/JCSMStreamingPublisheventhandler

下面是我的目录树的屏幕截图:

有什么办法解决这个问题吗

[编辑]

Pom文件:

<?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>CAMM</groupId>
<artifactId>SOM_Enrichment</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

</build>

<dependencies>
    <dependency>
        <groupId>com.solacesystems</groupId>
        <artifactId>sol-jcsmp</artifactId>
        <version>[10,)</version>
    </dependency>
</dependencies>
CAMM
SOM_浓缩
1.0-快照
maven汇编插件
3.1.0
带有依赖项的jar
组装
包裹
单一的
com.solacesystems
溶胶jcsmp
[10,)

在没有看到完整的
POM.xml
的情况下,我假设您没有将最终工件构建为“胖jar”。我的意思是,jar不仅包含您自己的类,还包含所有第三方依赖项


您需要使用或之类的东西来为您执行此操作。从屏幕截图上看,虽然我看到您正在使用IntelliJ,但您也应该能够运行IDE,显然只是为了测试目的。

在没有看到完整的
POM.xml
的情况下,我假设您没有将最终工件构建为“胖罐子”。通过此,我可以这意味着JAR不仅包含您自己的类,还包含所有第三方依赖项


您需要使用或之类的东西来为您执行此操作。从屏幕截图上看,虽然我看到您正在使用IntelliJ,但您也应该能够运行IDE,显然只是为了测试目的。

您的程序从
pom.xml
中的
com.solacesystems
依赖项加载类,但是您的类路径仅包含您的构建工件jar。按照@Kerry的建议,构建一个胖jar,或者使用exec maven插件从命令行运行。在您的项目目录中(执行
mvn package
),执行:

mvn exec:java -Dexec.mainClass=TopicPublisher

该插件根据pom中定义的依赖项构建classpath参数。有关更多选项,请参阅。

您的程序从
pom.xml
中的
com.solacesystems
依赖项加载类,但您的类路径仅包含构建工件jar。按照@Kerry的建议,构建胖jar,或者使用exec maven插件to从命令行运行。从您的项目目录(在其中执行
mvn package
)中,执行:

mvn exec:java -Dexec.mainClass=TopicPublisher

该插件根据pom中定义的依赖项构建类路径参数。有关更多选项,请参阅。

pom jdk版本和您计算机上的jdk?@Alec我没有指定pom jdk版本;不确定默认值是什么,但我认为我当前使用的是我计算机上的jdk。版本是1.8.pom jdk版本,而不是你的电脑上有jdk吗?@Alec我没有指定pom jdk版本;不确定默认版本是什么,但我认为是我当前使用的版本,即我电脑上的jdk。版本是1.8。谢谢你的回答。我按照说明更新了pom.xml文件。尽管错误仍然存在。我似乎记得我需要使用shade插件。你有没有尝试过用它来代替汇编插件?谢谢你的回答。我按照说明更新了pom.xml文件。但是错误仍然存在。我似乎记得我需要使用shade插件。你有没有尝试过用它来代替汇编插件?哦,哇,这很有效!问题似乎是我的依赖关系太小了不在jar中,但我尝试了Kerry的建议,但没有效果:-/这运行了应用程序,但它是否构建了一个具有第三方依赖项的jar?我认为它没有@Kerry。我感谢您的帮助,但我认为我必须给Kerry答案。非常感谢:)哦,哇,这很有效!问题似乎是我的依赖项不在jar b中但是我尝试了Kerry的建议,但没有任何效果:-/这运行了应用程序,但它是否构建了一个具有第三方依赖关系的JAR?我认为它没有@Kerry。我感谢你的帮助,但我认为我必须给Kerry答案。非常感谢:)