GitHub Actions部署Clojure项目遇Java版本不兼容错误如何修复?
修复Leiningen项目Java编译版本不兼容问题
这个错误的根源很明确:你使用的Maven Compiler Plugin 3.1已经废弃了对Java 1.5的支持,但Leiningen默认生成的POM里还在用1.5作为source和target版本。你提到的:java-source-paths和这个问题无关,它只是指定Java源码的路径,不影响编译版本设置。
直接修改project.clj就能解决问题,不需要手动改动生成的POM,具体步骤如下:
- 打开项目根目录的
project.clj文件,在项目配置块中添加:javac-options,指定兼容的Java版本(推荐用1.8及以上的LTS版本,比如1.8、11或17):
(defproject flow "your-version" ;; 保留你原有的其他配置项 :javac-options ["-source" "1.8" "-target" "1.8"] ;; 若使用Java 9+,更推荐用--release参数,它能自动处理跨版本兼容问题: ;; :javac-options ["--release" "8"] :java-source-paths ["src/java"] ;; 你的现有配置无需修改 ;; 其他配置... )
- 本地验证修复效果:
- 先执行
lein clean清除旧的编译产物 - 再运行
lein install重新生成POM并编译项目 - 打开生成的
pom.xml,检查maven-compiler-plugin部分,应该已经显示你指定的版本,示例如下:
- 先执行
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
- 将修改后的
project.clj推送到GitHub,重新触发Actions工作流,即可通过编译。
额外提醒:如果你的GitHub Actions runner使用的是较高版本的Java(比如11或17),优先使用--release参数,它比单独设置source和target更稳妥,能保证编译出的字节码在目标版本环境下正常运行。
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

