2017-02-09 154 views
4

首先:我是maven的新手。 我做了我的第一個Maven應用程序,並在IDE中成功測試了它。構建總是成功的,一切都像魅力一樣。Maven可執行文件Jar在啓動時拋出錯誤

現在我想將項目導出爲內置依賴項的可執行jar,但我不確定它爲什麼不起作用。

添加以下到我的POM文件,因爲這是我在不同的答案發現了類似的問題

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>com.pwc.scfa.pensareautomatio3.Main</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
</build> 

我明白,這指定的JVM啓動主類,作爲IDE不會自動設置。

我將jar放置在目標目錄中,將其複製到另一個目錄並嘗試執行它。

可悲的是下面的錯誤拋出:

enter image description here

enter image description here

能否請你給我一個提示,我在那裏可能出現了問題?那太好了。 (我使用NetBeans,如果這是任何幫助。)

這裏是我的堆棧跟蹤:

C:\Users\scfa\Desktop>java -jar PensareAutomatio-1.1.jar 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxm 
l4j/exceptions/InvalidFormatException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.privateGetMethodRecursive(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions 
.InvalidFormatException 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 7 more 

謝謝:)

+1

你可以使用歸檔工具(如7zip或winrar)打開jar文件嗎?如果是這樣,你可以發佈它的內容? 也嘗試從命令行運行它來查看堆棧跟蹤(在Windows中使用cmd,導航到包含該jar文件夾並鍵入「java -jar myjar.jar」 – gybandi

回答

1

如果我是正確的,Maven的JAR-插件創建一個jar包含所有已編譯的.class文件,但沒有依賴關係。

我推薦使用Maven的組裝插件並將其綁定到包的執行階段,這樣它會運行時建MVN安裝

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>com.pwc.scfa.pensareautomatio3.Main</mainClass> 
     </manifest> 
    </archive> 
    <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> 

this答案更多信息。

+1

非常感謝:) 問題是,因爲你推薦缺少的依賴關係,並且我不知道如何導出包括這些的可運行程序。 –