2012-03-28 79 views
4

嘿所以我一直在研究一個項目,我希望能夠從命令行作爲可執行jar運行。我已經能夠使用Mavens assembly:single命令創建具有依賴關係的jar。我的pom看起來像這樣。運行帶有依賴項的可執行jar的問題

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>org.openmetadata.main.OmadUpdate</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

構建成功,並創建罐子omad更新-0.0.1-SNAPSHOT-JAR-與-dependencies.jar。我去我的項目目標文件夾中的命令行,然後鍵入

java -jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar 

我也曾嘗試

java -cp omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.openmetadata.main.OmadUpdate 

不幸的是,我給一個java.lang.NoClassDefFoundError每種情況:組織/ openmetadata /主/ OmadUpdate。我很困惑,因爲我知道我的主類是在包org.openmetadata.main中,但它沒有找到。我覺得這特別令人困惑,因爲在我的朋友中,我將這個班級指定爲我的班級。我已經嘗試將主類的名稱更改爲src.main.java.org.openmetadata.main.OmadUpdate,並簡單地更改OmadUpdate,但似乎都沒有效果。感謝您提前提供任何幫助。

回答

2

我在上面的清單中看不到Class-Path條目,但是很長的文件名會提到依賴關係。如果程序依賴於此jar文件中的jar,則必須在Class-Path部分中列舉它們。有關更多詳細信息,請參閱Adding Classes to the JAR File's Classpath

+0

但根據此頁[鏈接](http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#aResources)它似乎沒有,我必須指定一個類路徑,它似乎是它會根據需要簡單地打包Maven依賴項。儘管如此,我認爲我可能會犯錯。 – decal 2012-03-28 20:23:02

+0

打開您的jar文件並在META-INF目錄中查找MANIFEST.MF文件。是否指定了類路徑? – Mike 2012-03-28 20:25:37

+1

好吧,我在Mavens [網站](http://maven.apache.org/shared/maven-archiver/examples/classpath.html#aMake)上發現,將 true添加到我的pom.xml應該照顧classpath,但是當我嘗試運行可執行jar時,仍然遇到我的Main類無法找到的問題。 – decal 2012-03-30 14:43:59

0

另一種選擇可能是使用onejar-maven-plugin。不幸的是,usage頁面有點缺乏,但是插件在正確配置時可以做到這一點。

0

我終於可以通過將下面的代碼添加到我的pom中來獲得此功能。

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>org.openmetadata.omadupdate.OmadUpdate</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> 
    </plugins> 
</build> 

沒有與它的孩子只有Maven依賴將加入廣口瓶中,並從項目本身將不會添加類沿POM處決標籤。

相關問題