簡體   English   中英

來自netbeans 6.9.1的java runnable jar

[英]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來說,這是一個兩步的事情:

  • 你必須告訴Maven生成一個“陰影”(包括依賴)jar,
  • 並且您必須指定主類(包含要運行的static main(..)方法的主類static main(..)

如果您正在使用Ant,可能需要查看此博客文章

在外部博客中關注這篇文章后解決

您必須將兩個插件( maven-assembly-pluginmaven-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)

請詳細說明您的項目

  1. 項目是否是從NetBeans New Project向導創建的?
  2. 項目是基於Ant還是Maven?
  3. 項目是否是從現有來源創建的自由形式項目?

這些附加信息將幫助我在具體細節中回答這個問題。 希望這有所幫助。

帶着敬意
圖莎爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM