【问题标题】:error: cannot find symbol(Heroku Discord Bot)错误:找不到符号(Heroku Discord Bot)
【发布时间】:2021-04-21 04:39:39
【问题描述】:

我正在尝试让我的 Discord 机器人在 Heroku 上工作,但我不断收到错误消息。构建过程运行良好,但机器人无法上线。我去资源 --> 更多 --> 查看日志并看到一个错误。我将错误理解为某些方法无法识别,因此我删除了错误之一。但是另一个会弹出。代码和机器人使用 IntelliJ 在本地工作。有人可以帮我解决这个问题吗?

错误/资源日志:

2021-04-18T23:58:17.202220+00:00 app[Worker.1]:   location: class Main
2021-04-18T23:58:17.226725+00:00 app[Worker.1]: src/main/java/Main.java:9: error: cannot find symbol
2021-04-18T23:58:17.226770+00:00 app[Worker.1]:         jda.setActivity(Activity.listening("!help"));
2021-04-18T23:58:17.226835+00:00 app[Worker.1]:                         ^
2021-04-18T23:58:17.226906+00:00 app[Worker.1]:   symbol:   variable Activity
2021-04-18T23:58:17.226942+00:00 app[Worker.1]:   location: class Main
2021-04-18T23:58:17.228071+00:00 app[Worker.1]: 5 errors
2021-04-18T23:58:17.230942+00:00 app[Worker.1]: error: compilation failed
2021-04-18T23:58:17.336252+00:00 heroku[Worker.1]: Process exited with status 1
2021-04-18T23:58:17.440163+00:00 heroku[Worker.1]: State changed from up to crashed

构建/部署日志:

-----> Building on the Heroku-20 stack
-----> Using buildpack: heroku/java
-----> Java app detected
-----> Installing JDK 15... done
-----> Installing Maven 3.6.2... done
-----> Executing Maven
       $ mvn -DskipTests clean dependency:list install
       [INFO] Scanning for projects...
       [INFO] 
       [INFO] -------------------< org.example:CalciteDiscordBot >--------------------
       [INFO] Building CalciteDiscordBot 1.0-SNAPSHOT
       [INFO] --------------------------------[ jar ]---------------------------------
       [INFO] 
       [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ CalciteDiscordBot ---
       [INFO] Deleting /tmp/build_6a1072dc/target
       [INFO] 
       [INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ CalciteDiscordBot ---
       [INFO] 
       [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ CalciteDiscordBot ---
       [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
       [INFO] skip non existing resourceDirectory /tmp/build_6a1072dc/src/main/resources
       [INFO] 
       [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ CalciteDiscordBot ---
       [INFO] Changes detected - recompiling the module!
       [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
       [INFO] Compiling 21 source files to /tmp/build_6a1072dc/target/classes
       [INFO] 
       [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ CalciteDiscordBot ---
       [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
       [INFO] skip non existing resourceDirectory /tmp/build_6a1072dc/src/test/resources
       [INFO] 
       [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ CalciteDiscordBot ---
       [INFO] No sources to compile
       [INFO] 
       [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ CalciteDiscordBot ---
       [INFO] Tests are skipped.
       [INFO] 
       [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ CalciteDiscordBot ---
       [INFO] Building jar: /tmp/build_6a1072dc/target/CalciteDiscordBot-1.0-SNAPSHOT.jar
       [INFO] 
       [INFO] --- maven-install-plugin:2.4:install (default-install) @ CalciteDiscordBot ---
       [INFO] Installing /tmp/build_6a1072dc/target/CalciteDiscordBot-1.0-SNAPSHOT.jar to /tmp/codon/tmp/cache/.m2/repository/org/example/CalciteDiscordBot/1.0-SNAPSHOT/CalciteDiscordBot-1.0-SNAPSHOT.jar
       [INFO] Installing /tmp/build_6a1072dc/pom.xml to /tmp/codon/tmp/cache/.m2/repository/org/example/CalciteDiscordBot/1.0-SNAPSHOT/CalciteDiscordBot-1.0-SNAPSHOT.pom
       [INFO] ------------------------------------------------------------------------
       [INFO] BUILD SUCCESS
       [INFO] ------------------------------------------------------------------------
       [INFO] Total time:  4.854 s
       [INFO] Finished at: 2021-04-18T23:57:57Z
       [INFO] ------------------------------------------------------------------------
-----> Discovering process types
       Procfile declares types -> Worker
-----> Compressing...
       Done: 76.7M
-----> Launching...
       Released v23
       https://calcitediscordbot.herokuapp.com/ deployed to Heroku

Main.java

import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;

import javax.security.auth.login.LoginException;

public class Main {
    public static void main(String[] args) throws LoginException {
        JDABuilder jda = JDABuilder.createDefault("I inserted token here");
        jda.setActivity(Activity.listening("!help"));
        jda.build();

    }
}

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>CalciteDiscordBot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.target>15</maven.compiler.target>
        <maven.compiler.source>15</maven.compiler.source>
    </properties>
         
    <dependencies>
        <dependency>
            <groupId>net.dv8tion</groupId>
            <artifactId>JDA</artifactId>
            <version>4.2.0_246</version>
        </dependency>
    </dependencies>
         
    <repositories>
        <repository>
            <id>jcenter</id>
            <name>jcenter-bintray</name>
            <url>https://jcenter.bintray.com</url>
        </repository>
    </repositories>
         
</project>

过程文件:

Worker: java src/main/java/Main.java

【问题讨论】:

    标签: java heroku


    【解决方案1】:

    如果您使用 IntelliJ 之类的 IDE 在本地运行,它会为您处理类似的事情,但您需要在部署之前添加一个插件来创建一个带有依赖项的 jar。

    <?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>CalciteDiscordBot</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>...</properties>
             
        <dependencies>...</dependencies>
             
        <repositories>...</repositories>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <configuration>
                                <archive>
                                <manifest>
                                    <mainClass>
                                        Main
                                    </mainClass>
                                </manifest>
                                </archive>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    

    【讨论】:

    • 完成此操作并将“package.MainClass”编辑为“Main”(我的分层:image)之后,Heroku 仍然执行相同操作事物。我试着把它放在 IntelliJ 中,但它给了我这个错误image
    • 我更新了我的答案我错过了 groupId 并添加了一些其他标签,如果 IntelliJ 仍然为您显示这种错误,请做一个简单的mvn clean package,IntelliJ 向我显示很多误报错误有时也没有正确加载某些依赖项等...所以我采用手动方式做事并且效果很好。
    • 如果我很烦人,我很抱歉(我以前从未在没有 IDE 的情况下处理过 pom.xml),但它现在给了我这个错误:image。我试图用新代码替换旧代码,Heroku 现在在构建日志中给了我这个错误:logs.
    • 放松,我又不好了,我会发布一个完整的 pom.xml 和你的文件配置,但是 IMO 你需要对 maven doc 做更多的研究,了解 pom 文件的结构。我假设你会知道插件标签放在哪里,无论如何,现在可以工作了。
    • 不幸的消息,它仍然不起作用._。我将新的 pom.xml 添加到 IntelliJ,但它给了我一个错误(它也不适用于 Heroku)所以我决定将 image 添加到 pom.xml。然后我在 Heroku 上运行它,构建成功(logs)但机器人从未上线,资源日志仍然显示同一件事的错误(Resource Logs(我确实重置了密钥 btw))。
    【解决方案2】:

    要解决此问题,您必须更改 pom.xml 和 Procfile。

    将此行添加到 pom.xml:

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>2.1.0</version>
                <configuration>
                    <assembleDirectory>target</assembleDirectory>
                    <programs>
                        <program>
                            <mainClass>MAIN_CLASS_PATH</mainClass>
                            <name>BOT_NAME</name>
                        </program>
                    </programs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    

    将此添加到您的构建标签中的插件标签内。将 MAIN_CLASS_PATH 更改为您自己的主类,并将 BOT_NAME 更改为您的项目/机器人的名称。

    将 Procfile 的 Worker 更改为:

    worker: sh target/bin/BOT_NAME
    

    这里也一样 ^,将 BOT_NAME 更改为您的项目/机器人的名称。

    大部分功劳归功于 BooleanCube 的 Discord。感谢@Kaneda 的帮助!

    【讨论】:

    • 您可以使用我在评论中粘贴的链接找到 procfile,不知道为什么不将我的答案标记为已接受,但这很好,很高兴这有效!
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2021-04-30
    • 2021-06-28
    • 2018-07-16
    • 2019-12-19
    • 2021-11-11
    • 2019-08-12
    • 2020-07-13
    相关资源
    最近更新 更多