1

チャットプロジェクトを作成しています。ide(netbeans)内で実行すると、正常に開き、うまく機能します。しかし、ターミナルから実行すると、次のようなエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jgroups/Receiver at com.mycompany.chatapp1.ChatWindow.<init>(ChatWindow.java:32) at com.mycompany.chatapp1.Main.main(Main.java:10) Caused by: java.lang.ClassNotFoundException: org.jgroups.Receiver at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 2 more

コマンドで実行しますjava -jar ChatApp1-1.0-SNAPSHOT.jar

そして、ここに私の依存関係情報があります: <dependencies> <dependency> <groupId>org.jgroups</groupId> <artifactId>jgroups</artifactId> <version>3.4.3.Final</version> </dependency> </dependencies>

何が間違っている可能性がありますか?

4

2 に答える 2

3

jar プロジェクトを作成する場合、依存プロジェクトは含まれません。したがって、コマンドラインでクラスパスを設定する必要がありますが、-cpこれは非常に面倒です。または、 jar にすべての依存関係を含むMaven Shade Pluginを使用して、完全な実行可能 jar ファイルを作成することもできます。

次のスニペットを pom に含めます (もちろん、メイン クラスに含めます)。

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>my.main.class</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
于 2014-04-10T14:32:37.090 に答える
0

統合開発環境の要点は、ソース コードとその依存関係をセットアップして管理することです。

Eclipse はこれを 1 つの方法で行い、Netbeans は別の方法でそれを行い、IntelliJ も同様です。

Eclipse の Deployment Assembly をシミュレートすることで、再現を試みることができます。ライブラリとソース コードが保存されている場所を確認します。これらのディレクトリを javac コマンドに使用します。次に、メイン メソッドを含む必要なクラスで Java を実行します。

プロジェクトが Web アプリケーションであることを意図している場合、これはさらに難しくなります。

IDEに任せるべきです。

于 2014-04-10T14:33:05.623 に答える