当前位置: 首页 > 知识库问答 >
问题:

构建的JAR文件不正确[重复]

姬昊焱
2023-03-14
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/MongoClient
        at de.therealjan.TheRealBot.MongoDB.<init>(MongoDB.java:14)
        at de.therealjan.TheRealBot.TheRealBot.main(TheRealBot.java:16)
Caused by: java.lang.ClassNotFoundException: com.mongodb.MongoClient
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 

mongodb.java:

package de.therealjan.TheRealBot;

import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;

import java.net.UnknownHostException;

public class MongoDB {
    public MongoClient mongoClient;
    public DB db;
    public MongoDB() {
        try {
            mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        db = mongoClient.getDB("TheRealBot-JDA");
    }
}

我认为Maven没有构建正确,但我不知道。(我运行了包Maven构建)

共有1个答案

孔征
2023-03-14

默认情况下,Maven不会将您的依赖项及其传递依赖项打包到构建工件中。这不会在编译时引起任何问题,因为依赖类位于IDE的libs类路径中。但在运行时,这可能引发ClassNotFoundException异常,因为这些类不在运行时类路径中。您必须指示maven将它们打包到您的jar中。

在Mavenpom.xml文件中添加这个插件。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                            <archive>
                                <manifest>
                                    <mainClass>YOUR_MAIN_CLASS_FQN_GOES_HERE</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </execution>
                  </executions>
            </plugin>
        </plugins>
    </build>

确保您定义了您的主类。

 类似资料:
  • 我正在为Java企业应用程序类开发一个项目。我有一个带有ejb模块的应用程序,它有一个类库中的“facade”类,该类库连接到一个简单的类似Twitter的数据库。所有的逻辑都运行良好,但是,当我为facade添加远程bean并尝试运行它时,应用程序崩溃,最后包含堆栈跟踪。 通过查看GlassFish输出屏幕,我发现了以下警告: 警告: ACDEPL112:以下扩展或库引用自C:\用户[proje

  • 注意:我在“可能重复”的问题中尝试了建议的答案,不幸的是,它们对我没有帮助。我稍微修改了一下我的问题。 错误是(翻译过来的,可能是不正确的措辞): myapp.jar中没有主清单属性 我尝试过在不同的平台上建议的不同的解决方案(例如这里和这里)。然而,据我所知,这似乎是我的的一个问题。 我的POM: 我查阅了我的,内容如下: 我似乎缺少的是: 我查阅了-文件,注意到了以下几点: 缺少文件 我的中没

  • HTSJDK是一个用于访问常见文件格式(如SAM和VCF)的库。我想构建HTSJDK JAR。在文档页面中说我必须为此使用Ant。所以我安装了Ant并运行以下命令: ant htsjdk-jar [javac]用法:javac [javac]use-help获取可能选项列表 生成失败 build.xml文件有问题。这里是文件的开头: 拜托,有人能告诉我该怎么做才能解决这个问题吗?

  • 有人能这么好心解释一下如何在Netbean MavenJava应用程序中使用所有maven依赖项创建单个jar文件吗?在Eclipse中,用户可以导出到Runnable jar文件并选择将所需的库打包到生成的JAR中,因此项目中的所有依赖项都包含在创建的jar文件中。在Netbean中没有这样的选项。我检查了其他答案,但我唯一理解的是我必须将代码添加到Build.xml文件中,该文件甚至不在项目中

  • 问题内容: 我有一个包含单个模块和一些依赖项的项目。我想在一个包含编译模块的单独目录中创建一个jar。另外,我想在模块旁边提供依赖项。 无论我如何扭曲IntelliJ的“构建jar”过程,模块的输出都将显示为空(除了META-INF文件之外)。 问题答案: 这是使用IntelliJ 10构建jar的方法http://blogs.jetbrains.com/idea/2010/08/quickly-

  • 请注意:在泽维尔的回答之后编辑的回答 我试图在Android Studio中为一个相同的应用程序项目使用不同的构建风格。然而,我似乎有一个可怕的时间配置它适当地工作。 步骤: null **我检查了分级设置,显然使用自动导入已经启用。尽管如此,对build.gradle文件进行更改不会自动更新构建变体。注意:我还尝试使用Build-Rebuild项目和/或Build-Make项目。我仍然必须关闭项