我在运行使用Maven打包的JAR时遇到问题。这是一个非常简单的类,只从本地计算机上的目录中获取文件并将其发布到SFTP。
我正在使用“mvn package”命令,并且看到JAR显示在我的目标文件夹中,但是当我尝试运行JAR时,我收到以下错误:
“线程中的异常”主“java.lang.NoClassDefFoundError:com / jcraft / jsch / Jsch 在。 java.lang.Class.getDeclaredMethods0 等
引起:java.lang.ClassNotFoundException:com.jcraft.jsch.Jsch“
现在程序在运行main方法的eclipse中运行时运行得很好,所以我假设maven包命令没有将所有正确的类带入我的JAR中?在我的“Maven Dependencies”中,我所拥有的是“jsch-0.1.49.jar”和“junit-3.8.1.jar”。任何帮助都将不胜感激。我相信在这个过程中我错过了一个步骤。
答案 0 :(得分:1)
maven package命令和maven-jar-plugin没有构建附加了依赖项的jar文件。他们只是用您的项目源构建一个jar文件。
你需要一个超级罐,它包含你的主类需要的一切。存档的最简单方法是使用maven-shade-plugin:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>