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这将非常麻烦,或者您可以使用Maven Shade Plugin,它将所有依赖项包含在您的 jar 中,从而生成一个完整的可执行 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 采用一种方式,Netbeans 采用另一种方式,IntelliJ 也是如此。

您可以尝试通过模拟 Eclipse 的 Deployment Assembly 来重现它。找出您的库和源代码的存储位置。将这些目录用于您的 javac 命令。然后用你想要的包含main方法的类执行java。

如果您的项目旨在成为 Web 应用程序,这将变得更加困难。

你真的应该让 IDE 为你做这件事。

于 2014-04-10T14:33:05.623 回答