4

NetBeans6.9.1 にプロジェクトがあります。IDE内からは正常に動作します。しかし、NetBeans が dist ディレクトリの下に自動的に作成した jar を実行しようとすると、プロジェクト内のクラスに対して NoClassDefFoundError が発生します。私は何を間違っていますか?私はAntか何かを使用している必要がありますか(Antを知りません)Eclipseで「実行可能なjarを作成」し、jarは問題なく実行されます。NetBeans に同等のものはありますか?

更新: dist/myJar で jar を抽出しましたが、マニフェストでは、プロジェクトの現在のパスとルート パスが欠落していました。それらを手動で追加し、コマンドラインからjarを再作成しました。そして、それは機能します。しかし、NetBeans がこれらを jar のマニフェストのクラスパスに追加しないのはなぜですか。わかりません

更新 2問題が見つかりました。これは NetBeans の深刻なバグだと思います。リファクタリングを行い、パッケージ名をmyPackage.modelからmypackage.modelに変更しました。しかし、NetBeans はそれを正しく行いませんでした。ツリーナビゲーターに表示されるように、実際にパッケージの名前を mypackage に変更しましたが、ファイル内のパッケージ名は myPackage のままでした。プログラムは IDE 内で正常に実行され、エラーは報告されませんでした (ただし、すべてのクラスは自分のパッケージに属していると宣言され、ツリーではパッケージの下にありました)、 distディレクトリ内でjarを実行しようとすると、クラスが見つからないという例外が発生しました。今日、クラスが私のPとして報告されていることに気付きました私のパッケージ/モデルの代わりにパッケージ/モデル。クラスを調べたところ、リファクタリングによってすべてが完全にメッシュ化されました。クラス内のパッケージ名を手動で myPackage から mypackage に変更し、すべてのインポート (myPackage をインポートしていた) を修正しました。これは NetBeans の既知の問題ですか????

ありがとう

4

4 に答える 4

6

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 の場合は次の 2 段階です。

  • 「影付き」(依存関係を含む) jar を生成するように Maven に指示する必要があります。
  • また、メイン クラス (static main(..)実行するメソッドを含むクラス) を指定する必要があります。

Ant を使用している場合は、このブログ投稿を参照してください。

于 2010-09-22T13:07:07.220 に答える
1

私はこれと同じ問題を抱えていましたが、NetBeans 6.8 と 6.9 で機能していた NetBeans 6.9.1 の不具合のようだとしか言いようがありません。

便宜上、WinZip または WinRar で開き、そこからマニフェスト ファイルを変更するだけで、自分で jar ファイルを作成する必要はありません。それが私がすることです。

于 2010-09-22T15:03:40.637 に答える
1

外部ブログのこの投稿に従って解決しました:

ファイルのセクションに2 つのプラグイン (maven-assembly-pluginmaven-jar-plugin)を追加する必要があります。セクションを構築すると、次のようになります。buildpom.xml

<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>
于 2013-01-23T17:10:38.487 に答える
0

NetBeansは、メニューまたはツールボタンから「クリーンアンドビルド」コマンドを実行すると、プロジェクト用の自給自足のJARファイルを作成します。

理想的には、Jarファイルのクラスパスにプロジェクトのルートフォルダが含まれていてはなりません。マニフェスト.mfファイルのClass-PathプロパティでプロジェクトにライブラリJARSを自動的に追加した場合、NetBeansはライブラリJARSを追加します。

カスタム要件がある場合は、ビルドされたJARに含まれるmanifest.mfファイルを変更することもできます。マニフェスト.mfファイルは、プロジェクトのルートディレクトリにある[ファイル]パネルから入手できます。

java -jarコマンドを使用してJARを実行可能にするには、プロジェクト構成でMainクラスを指定する必要があります。(プロジェクトがNetBeansプロジェクトウィザードを使用して作成された場合、このクラスはすでに定義されています。それ以外の場合は、手動で行う必要があります)

次のように、メニューオプションを使用してメインクラスを指定します。

File > Project Properties > Run (Category) > Main Class (textbox)

プロジェクトの詳細を次のように教えてください

  1. プロジェクトはNetBeansの新規プロジェクトウィザードから作成されていますか?
  2. プロジェクトはAntベースですか、それともMavenベースですか?
  3. プロジェクトは既存のソースから作成された自由形式のプロジェクトですか?

この追加情報は、具体的な詳細で質問に答えるのに役立ちます。これがお役に立てば幸いです。


Tusharに関して

于 2010-09-23T10:39:05.130 に答える