基于JDA的Discord Bot部署至Heroku时语言检测失败求助
解决Heroku部署JDA Discord Bot时的语言检测错误
别担心,这个报错是Heroku没认出你的Java项目导致的,咱们一步步来搞定:
1. 给项目补上构建配置文件
Heroku识别Java项目全靠Maven的pom.xml或者Gradle的build.gradle,如果你的项目还没有,必须先补上。以Maven为例,在项目根目录创建pom.xml,里面要包含这些关键配置:
- 符合JDA要求的Java版本(至少Java 11,推荐用17)
- JDA的依赖引入
- 打包插件,指定你的主类全路径(也就是
fr.Bot.Main)
给你个参考的pom.xml片段:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>net.dv8tion</groupId> <artifactId>JDA</artifactId> <version>5.0.0-beta.20</version> <!-- 换成最新稳定版即可 --> <exclusions> <exclusion> <groupId>club.minnced</groupId> <artifactId>opus-java</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>fr.Bot.Main</mainClass> <!-- 你的主类全路径 --> </manifest> </archive> </configuration> </plugin> </plugins> </build>
2. 手动指定Java Buildpack
如果Heroku还是没自动检测到,咱们直接手动设置:
- 要么在Heroku控制台的项目设置里找到Buildpacks,添加
heroku/java - 要么用命令行执行:
heroku buildpacks:set heroku/java
3. 创建Procfile告诉Heroku启动方式
在项目根目录新建一个名为Procfile(注意首字母大写,无后缀)的文件,内容根据你的打包方式选一个:
- 如果打包成可执行Jar包:
worker: java -jar target/你的Bot jar包名称.jar - 如果依赖和主类分开:
worker: java -cp target/classes:target/lib/* fr.Bot.Main
这里用worker而不是web,因为Discord Bot不需要Web服务,用Web dyno会因为找不到端口报错。
4. 安全存储Bot Token
绝对不要把Token硬编码在代码里!在Heroku控制台的项目设置里,找到Config Vars,添加键值对BOT_TOKEN:你的Discord Bot Token,然后在代码里通过System.getenv("BOT_TOKEN")获取这个值。
5. 启动Worker Dyno
部署后,记得在Heroku控制台的Resources里调整dyno配置:
- 把
webdyno的数量调成0 - 把
workerdyno的数量调成1
或者用命令行快速设置:heroku ps:scale web=0 worker=1
这样操作下来,Heroku就能正确识别并运行你的JDA Bot了。
内容的提问来源于stack exchange,提问作者Owczarek Romain
相关产品推荐
相关产品推荐

