我的目标是按照教程中的建议调试此代码以实时查看它。
我的IDE是Visual Studio Code,这个例子的语言是Java。我正在运行一个 Flink 数据流 API 教程。
当我在任何一行放置断点时,出现以下错误:
Cannot find a class with the main method in the folder 'frauddetection'.
有人暗示我创建了一个launch.json文件,因此,这就是我创建的:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Launch) - Current File",
"request": "launch",
"mainClass": "FraudDetectionJob"
}
]
}
即使在配置上述文件并指定mainClass
之后,我在调试器终端中也收到相同的错误:
Error: Could not find or load main class FraudDetectionJob
我尝试执行的代码如下:
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package spendreport;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.walkthrough.common.sink.AlertSink;
import org.apache.flink.walkthrough.common.entity.Alert;
import org.apache.flink.walkthrough.common.entity.Transaction;
import org.apache.flink.walkthrough.common.source.TransactionSource;
/**
* Skeleton code for the datastream walkthrough
*/
public class FraudDetectionJob {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Transaction> transactions = env
.addSource(new TransactionSource())
.name("transactions");
DataStream<Alert> alerts = transactions
.keyBy(Transaction::getAccountId)
.process(new FraudDetector())
.name("fraud-detector");
alerts
.addSink(new AlertSink())
.name("send-alerts");
env.execute("Fraud Detection");
}
}
如何调试此文件?
我相信您无法编译和运行该应用程序。在您的pom.xml
中,这导致了问题
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
将范围更改为compile
以解决此问题。另外,更多技术信息在这里。
--我是如何找到问题的--
我尝试运行教程中的示例(在Intellij IDEA中(,并得到类似于您的错误:
Error: Unable to initialize main class spendreport.FraudDetectionJob
Caused by: java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/functions/source/SourceFunction
在进一步搜索时,我发现了这个类似的答案。
转载:
似乎 eclipse maven 导入器中的一个错误不适用于生命周期映射插件,要暂时解决您的问题,请尝试
- 关闭 VSCODE 和 Eclipse
- 删除 .project 文件和 .classpath 文件(如果根文件夹有(
- 在根文件夹上运行 MVN Eclipse:Eclipse
- 在 vscode 中打开根文件夹,F5 您将能够调试
或删除插件管理>插件中的生命周期映射插件
更多细节见 Flink 官方演示调试会得到错误:找不到使用 main 方法的类