coplot 2分钟生成项目文档与 think 模式自动解决编译问题

作者: | 更新日期:

拿到一个旧项目的代码,使用 coplot 来帮忙看下。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

零、背景

团队内有一个大数据计算任务,使用 scala 语言编写的,但是团队内要么是 cpp 语言开发要么是 go 语言开发,都不了解这个,导致这一块这么多年来都处于无人维护状态。

这个计算任务是每小时跑一次,经常被投诉任务失败或者超时。
所以我就打算找个人把这个任务重构一下,从而能够维护起来,并修复任务超时的问题。

最近招了一个新同学来重构这个任务,方案评审时发现新同学缺少这个旧代码的具体介绍,所以我赶紧现场使用大模型自动分析代码生成了文档,发现太方便了。

一、使用 copilot 生成项目文档

prompts: 分析下这个项目的代码,画出一个流程图、时序图、架构图。

coplot 竟然使用纯文本画出了流程图、时序图、架构图。

流程图:

时序图:

架构图:

当然,也有这个项目的功能总结。

由于输出的架构图是文本形式,我赶紧换了一个 prompts,要求输出 mermaid 格式的图。

prompts: 分三步输出:第一步使用文字输出代码的逻辑,第二步使用 mermaid 输出相关图,第三步看下代码有啥问题。

生成的 mermaid 贴到 https://mermaid.live/ 即可生成各种图。

二、使用 copilot 自动修复编译问题

评审之后,我也想在我的电脑上尝试编译这个项目,看看能不能编译通过。

prompts:scala 程序如何编译打包

大概命令是:

mvn clean compile
mvn package

当然,由于我还没安装 maven,所以报错”zsh: command not found: mvn“。

所以需要先安装 maven。

brew install maven

随后编译报错:scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found。

随后需要安装 java8。

brew install --cask temurin@8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
mvn clean compile

之后还是报错。
Claude 3.7 提示额度用完了,于是我把大模型切换的了 Claude 3.5 Sonnet 后,没想到大模型开始自我反思去死循环尝试解决问题了。

从错误信息和前文的上下文来看,这是因为项目需要使用 Java 8,但当前系统使用的是 Java 21。
我看到您的项目中已经有了 build.sh 脚本,它正确设置了 Java 8 环境。让我们直接使用这个脚本来编译:

chmod +x build.sh && ./build.sh

我们尝试运行 build.sh 脚本进行编译。
如果您仍然看到相同的错误,我们需要进一步确认 Java 8 的安装和配置:

/usr/libexec/java_home -V

我看到您的系统上已经安装了两个 Java 版本:

1. Java 21 (arm64):Home
2. Java 8 (x86_64):Home

让我们修改一下 build.sh 脚本以确保使用正确的 Java 8 路径:build.sh +11 -0

我看到您的系统上已经正确安装了 Java 8。
我刚刚修改了 build.sh 脚本,使其直接指向 Java 8 的具体安装路径,这样可以确保编译时使用正确的 Java 版本。

让我们再次尝试运行编译:./build.sh

刚才我修改了 build.sh 脚本,让它直接使用 Java 8 的具体路径。
让我们验证一下当前编译环境的 Java 版本:source build.sh && java -version

让我们尝试另一种方式来确保使用 Java 8。
我将创建一个更完整的构建脚本: build.sh +11 -0

我已经修改了构建脚本使其更加完善,现在让我们执行这个更新后的脚本:chmod +x build.sh && ./build.sh

好的!现在我可以看到脚本成功切换到了 Java 8(OpenJDK 1.8.0_452),这正是我们项目需要的版本。
从输出可以看出:

1. Java 版本已正确切换到 Java 8
2. Maven 开始执行编译

不过我注意到输出被截断了,让我们查看完整的编译结果:
根据执行结果,我看到 Maven 和 Java 环境已经正确配置:

1. Maven 版本:3.9.9
2. Java 版本:1.8.0_452 (Temurin)
3. Java 路径:/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home

环境配置正确了,Maven 正在使用 Java 8,这应该能解决之前的 object java.lang.Object in compiler mirror not found 错误。

不过编译输出似乎被截断了,让我们使用 -X 参数来查看详细的编译信息:
通过执行结果,我可以确认当前环境配置是正确的:Maven 已经在使用 Java 8 运行。
但是在编译输出中还是看不到完整的错误信息。

让我们尝试一个不同的方式来解决这个问题。
既然我们确定 Java 版本正确,问题可能出在 Scala 版本的兼容性上。
让我们稍微降低一下 scala-maven-plugin 的版本,因为 4.3.1 可能与当前的配置不太兼容:pom.xml +1 -1.

我刚刚将 pom.xml 中的 scala-maven-plugin 版本从 4.3.1 降级到了 3.4.4,因为这个版本与 Java 8 的兼容性更好。
现在让我们再次尝试编译:./build.sh

我看到现在环境已经正确配置:

1. Java 版本已成功切换到 Java 8 (OpenJDK 1.8.0_452)
2. scala-maven-plugin 版本已降级到 3.4.4 以提高兼容性

但是编译输出仍然被截断了。让我们尝试一个更可靠的方式来查看编译日志:./build.sh 2>&1 | tee compile.log

从执行结果来看,我们已经成功将环境切换到了 Java 8(OpenJDK 1.8.0_452),并且我也将 scala-maven-plugin 的版本从 4.3.1 降级到了 3.4.4 以提高兼容性。
虽然输出被截断了,但是我们可以尝试使用 VSCode 的任务系统来编译:

我们已经采取了几个步骤来解决编译问题:

1. 确认了系统中安装的 Java 8 版本
2. 修改了 build.sh 脚本以确保使用正确的 Java 8 路径
3. 降级了 scala-maven-plugin 从 4.3.1 到 3.4.4 版本
4. 尝试了多种方式执行编译

从执行结果来看,Java 环境已经正确切换到了 Java 8(OpenJDK 1.8.0_452),这是我们需要的版本。我最后启动了 VSCode 的编译任务,它会在后台运行。

让我们等待一会儿,看看编译结果:cat compile.log

从完整的编译日志中,我发现了几个关键问题:

1. 主要错误仍然是 object java.lang.Object in compiler mirror not found,但现在我们可以看到更多上下文。
2. 发现一个额外的问题:[WARNING] The POM for com.xxx.spark:spark-streaming_2.11:jar:2.4.4 is invalid

让我们通过以下方式来解决这个问题:

清理 Maven 仓库中可能损坏的依赖:rm -rf ~/.m2/repository/com/xxx/spark/spark-streaming_2.11/2.4.4/

从完整的编译日志中,我发现问题主要出在两个地方:

1. 一个损坏的 Spark 依赖包(com.tencent.spark:spark-streaming_2.11:jar:2.4.4)
2. scala-maven-plugin 的版本兼容性问题

我已经删除了损坏的依赖包。现在让我们再做一次尝试,这次使用 -U 参数强制更新所有依赖.

当我看到 <think> 标签时,突然知道为啥这个自言自语为啥和 DeepSeek 一模一样了。
就这样,我一直看着,最后,Claude 3.5 Sonnet 告诉我编译成功了。

三、最后

下午的评审会议上,我使用 coplot 几分钟生成了项目逻辑与相关架构图、时序图。

晚上,我又通过 coplot 帮我解决了编译问题。

自带 think 模式确实很有意思,可以不断尝试解决问题。

我们只需要看着,什么都不需要做,coplot 自己会去分析错误日志,然后思考怎么解决,然后去尝试解决,就这样一直循环着,直到问题解决。

我一点都不了解 scala ,也不了解 maven,通过 coplot 的 think 模式,轻松把这个项目编译通过了。

就凭这点,我打算继续续费 coplot 会员。

《完》

-EOF-

本文公众号:天空的代码世界
个人微信号: tiankonguse
公众号ID: tiankonguse-code

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越