【问题标题】:Deploy Java Telegram bot on Heroku: Could not find or load main class在 Heroku 上部署 Java Telegram 机器人:无法找到或加载主类
【发布时间】:2021-08-02 19:25:34
【问题描述】:

我正在用这个库写一个电报机器人:https://github.com/rubenlagus/TelegramBots

机器人可以在我的本地机器上成功运行,但不能在 Heroku 上运行。 错误消息是“无法找到或加载主类。”

我已经阅读了很多类似的问题,但仍然无法解决我的问题,因为其他问题与此有所不同。

以下是 Heroku 发生错误时的一些日志:

2021-05-12T11:51:15.644410+00:00 heroku[worker.1]: Starting process with command `sh target/bin/my_bot_test`
2021-05-12T11:51:17.945513+00:00 heroku[worker.1]: State changed from starting to up
2021-05-12T11:51:19.427171+00:00 app[worker.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2021-05-12T11:51:19.616191+00:00 app[worker.1]: Error: Could not find or load main class Main
2021-05-12T11:51:19.668857+00:00 heroku[worker.1]: Process exited with status 1
2021-05-12T11:51:19.756822+00:00 heroku[worker.1]: State changed from up to crashed

这里是pom.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>my_bot_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots-abilities</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <assembleDirectory>target</assembleDirectory>
                    <programs>
                        <program>
                            <mainClass>Main</mainClass>
                            <name>my_bot_test</name>
                        </program>
                    </programs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

这里有一些用于部署的 cmd:

mvn clean install
git add .
git commit -m "test"
heroku login
git remote add heroku [gitUrl]
git push heroku master
heroku ps:scale worker=1

学习时参考了这个页面:https://javarush.ru/groups/posts/504-sozdanie-telegram-bota-na-java-ot-idei-do-deploja

我写的Procfile:

worker: sh target/bin/my_bot_test

了解到Procfile的内容是在项目根目录下执行命令target/bin/my_bot_test。所以我尝试在我的机器上执行它并成功运行。

我不知道错误是如何发生的以及如何解决问题...请帮助我。提前致谢。

【问题讨论】:

  • for 在 POM 中提供完全限定的路径。参考stackoverflow.com/questions/29920434/…
  • @Mayur 我的主类在默认包中。完全合格的路径应该是什么样的?我认为这只是我在pom.xml中写的类名:&lt;mainClass&gt;Main&lt;/mainClass&gt;
  • 如果你使用 eclipse 选择类名并右键单击你会找到合格的路径,否则它的类文件路径来自项目目录。
  • @Mayur 我解决了这个问题,并在下面的答案中写下了原因。感谢您的帮助!

标签: java heroku telegram-bot


【解决方案1】:

问题解决了。

这是因为 Heroku 会在服务器上编译源代码,而不是直接运行编译好的程序。所以我应该把 THE SOURCE CODE 而不是编译好的程序推送到 Heroku 的 git。

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2019-03-22
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多