我的 IntelliJ Idea 中有一个 Telegram Bot 项目,它在 IDE 中运行良好。
我的目标是构建一个 jar 文件以在 IDE 之外测试此应用程序。
构建 jar 文件后,我总是遇到同样的问题 -
Exception in thread "main" java.lang.NoClassDefFoundError: com/pengrad/telegrambot/TelegramBot
我使用 gradle,所以我在
build.gradle
中有这个(不是完整的库列表):
dependencies {
...
implementation 'com.github.pengrad:java-telegram-bot-api:5.0.1'
...
}
然后我在 IntelliJ 中选择
Project Structure
-> Artifacts
-> + 号 -> jar -> 来自具有依赖项的模块
这是我的最后一个屏幕,我相信我添加了
java-telegram-bot-api...
的依赖项
我的 MANIFEST.MF 文件是:
Manifest-Version: 1.0
Main-Class: Socrates
所以我的代码可以一直工作到应该使用 Telegram 依赖项的地方
我尝试将类路径添加到
MANIFEST.MF
- 在那里添加电报包 jar 名称会增加新问题 - java 找不到主模块
你能帮我找到正确的方向吗?
您可以继续沿着手动构建可执行 JAR 的路线,或者您可以使用内置 Gradle 方法来组合可执行 Java 应用程序,该方法在应用程序插件中提供。
首先确保应用此插件:
plugins {
id 'application'
}
确保它知道你的主类:
application {
mainClass = 'Socrates' // Use the fully qualified name
}
然后运行任务
installDist
,将您的应用程序安装在 build/install
文件夹中。这包括代码的 JAR 和依赖项 JAR,以及一些用于执行的脚本。 (有关更多详细信息,请参阅Distribution插件文档,这是由应用程序插件添加的插件。)
启动脚本位于
build/install/applicationName/bin
目录中(将 applicationName
替换为您的 Gradle 应用程序名称),一个用于 Unix 系统,一个用于 Windows。它们使用该主类名称和指向安装目录中的依赖项 JAR 的类路径执行 java
命令。
因此,例如在 Unix 上,您可以运行命令
build/install/applicationName/bin/applicationName
来运行您的应用程序。