2013-05-16 100 views
0

我遇到了運行我使用Maven打包的JAR的問題。這是一個非常簡單的類,它只從本地計算機上的目錄獲取文件並將其發佈到SFTP。嘗試運行打包的Jar時出錯(Maven)

我現在用的是「MVN包」命令,我看到JAR在我的目標文件夾中顯示出來,但是當我嘗試運行JAR我收到以下錯誤:

「異常線程」 main 「java.lang.NoClassDefFoundError:COM/jcraft/jsch/jsch 在java.lang.Class.getDeclaredMethods0 等

所致:拋出java.lang.ClassNotFoundException:com.jcraft.jsch.Jsch」

現在程序運行得很好,當我在eclipse中運行它只是運行主要方法,所以我假設t這是什麼與maven包命令沒有把所有正確的類放入我的JAR?在我的「Maven Dependencies」中,我擁有的是「jsch-0.1.49.jar」和「junit-3.8.1.jar」任何幫助都將不勝感激。我相信在這個過程中我錯過了某個地方。

回答

1

maven包命令和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> 
+0

真棒的答案,獲得了對maven的理解,完美地工作。不能有更好的要求。謝謝。 – parchambeau