运行Java版Discord EPGP机器人时MAVEN编译成功但启动报错求助
问题解决方案
1. 修复mvn exec:java启动命令错误
你之前使用的mvn exec:java命令格式不符合maven exec插件的传参规则,正确命令需要通过-Dexec.mainClass参数指定主类全限定名,-Dexec.args传递启动参数,在项目根目录执行如下命令即可正常启动:
mvn exec:java -Dexec.mainClass="com.epgpbot.transport.discord.DiscordBotLauncher" -Dexec.args="config.json"
注意主类全限定名不需要加src.main.java前缀,该路径是源码的目录结构,不是编译后类的实际路径。
2. 修复jar包运行缺少依赖的问题
默认maven打包生成的jar仅包含项目本身的代码,不包含gson等第三方依赖,所以运行时会抛出类找不到的错误,有两种常用解决方式:
方式一:打包为带依赖的fat jar
在项目pom.xml的build/plugins节点下添加maven-assembly-plugin配置:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.epgpbot.transport.discord.DiscordBotLauncher</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
之后重新执行mvn clean package,target目录下会生成后缀为jar-with-dependencies的jar包,提前将写好的config.json放到该jar同目录下,执行如下命令即可启动:
java -jar epgp-discord-bot-0.0.1-jar-with-dependencies.jar config.json
方式二:运行时手动指定依赖路径
如果不想修改pom文件,可以将项目所有依赖的第三方jar放到同一个lib目录下,运行时通过classpath参数指定依赖路径即可:
java -cp "epgp-discord-bot-0.0.1.jar:lib/*" com.epgpbot.transport.discord.DiscordBotLauncher config.json
内容的提问来源于stack exchange,提问作者LuisEduLeiva
相关产品推荐
相关产品推荐

