[英]java runnable jar from netbeans 6.9.1
我在NetBeans6.9.1中有一個項目。 它在IDE內部工作正常。 但是當我嘗試運行jar時,NetBeans已經在dist目錄下自動創建了,我得到了項目中的類的NoClassDefFoundError。 我究竟做錯了什么? 我應該使用Ant還是其他東西(不知道Ant)在eclipse中我做了一個“create runnable jar”,jar運行沒有問題。 NetBeans中有相應的東西嗎?
更新 :在dist / myJar中,我解壓縮了jar,在清單中,我的項目的當前路徑和根路徑都丟失了。 我手動添加它們,並從命令行重新創建jar。 它有效。 但是為什么NetBeans不會在jar的manifest的類路徑中添加這些。我不明白
更新2我發現了問題。 我認為這是一個嚴重的NetBeans錯誤。 我已經完成了重構,並將包名稱從myPackage.model更改為mypackage.model 。 但是NetBeans並沒有正確地做到這一點。 它確實將包的名稱更改為mypackage,如樹導航器中所示,但文件中的包名仍為myPackage 。 該項目在IDE內部執行的罰款,沒有報告錯誤(盡管所有的類被聲明為屬於我的P ackage和他們在我的p ackage樹),但是當我試圖運行dist目錄我里面的罐子得到了一個沒有找到的例外。 今天我注意到這個課程被報告為我的P ackage / model而不是我的p ackage / model。 我查看了類,重構完全搞定了一切。 我手動將包名從myPackage中的類名更改為mypackage,並更正了所有導入(導入myPackage)。 這是一個已知的NetBeans問題????
謝謝
使用NetBeans,您的Java項目將基於Maven或Ant。 你想要做的是創建一個包含所有依賴項的“胖”jar。 對於Maven,您可以將以下行添加到您的pom中以實現:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>package.and.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
所以對於Maven來說,這是一個兩步的事情:
static main(..)
方法的主類static main(..)
。 如果您正在使用Ant,可能需要查看此博客文章 。
您必須將兩個插件( maven-assembly-plugin
和maven-jar-plugin
)添加到pom.xml
文件的build
部分。 你構建的部分將類似於:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>(select version, i.e: 2.3)</version>
<executions>
<execution>
<goals>
<goal>attached</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>your.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>(select version, i.e: 2.3.2)</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>your.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
我一直都有同樣的問題,我只能說它似乎是NetBeans 6.9.1的一個小故障,因為它在6.8和6.9中工作。
為方便起見,您可以在WinZip或WinRar中打開它,只需從那里更改清單文件,而無需自己運行。 這就是我做的。
當您從菜單或工具按鈕執行“清理並生成”命令時,NetBeans會為您的項目創建一個自給自足的JAR文件。
理想情況下,Jar文件的類路徑不應包含項目的根文件夾,如果已將庫JARS自動添加到manifest.mf文件的Class-Path屬性中的項目中,則NetBeans會添加庫JARS。
如果您有任何自定義要求,您甚至可以修改包含在構建的JAR中的manifest.mf文件。 manifest.mf文件可從項目根目錄的“文件”面板中獲得。
要使用java -jar命令生成JAR可執行文件,您應在項目配置中指定Main類。 (如果項目是通過NetBeans項目向導創建的,則此類已經定義,否則我們必須手動執行)
通過Menu選項指定主類,如下所示:
File > Project Properties > Run (Category) > Main Class (textbox)
請詳細說明您的項目
這些附加信息將幫助我在具體細節中回答這個問題。 希望這有所幫助。
帶着敬意
圖莎爾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.