0

我在运行使用 Maven 打包的 JAR 时遇到问题。这是一个非常简单的类,它只从本地机器上的目录中获取一个文件并将其发布到 SFTP。

我正在使用“mvn package”命令并且看到 JAR 出现在我的目标文件夹中,但是当我尝试运行 JAR 时出现以下错误:

“线程“主”java.lang.NoClassDefFoundError 中的异常:com/jcraft/jsch/Jsch at.java.lang.Class.getDeclaredMethods0 等。

引起:java.lang.ClassNotFoundException: com.jcraft.jsch.Jsch"

现在程序运行得很好,当我在 eclipse 中运行它时只运行 main 方法,所以我假设它是 maven package 命令没有将所有正确的类带入我的 JAR 的东西?在我的“Maven 依赖项”中,我只有“jsch-0.1.49.jar”和“junit-3.8.1.jar”任何帮助将不胜感激。我确信在这个过程中我错过了一个步骤。

4

1 回答 1

1

maven package 命令和 maven-jar-plugin 没有构建附加依赖项的 jar 文件。他们只是使用您的项目源构建一个 jar 文件。

你需要一个 uber 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>
于 2013-05-16T16:40:53.060 回答