尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
GitHub Actions 中 setup-java 步骤详解:JDK 设置与 Maven 依赖缓存
1. 引言在 GitHub Actions 工作流中Java 项目的构建通常需要配置 JDK 环境并管理依赖缓存以加速构建过程。actions/setup-java是一个官方 Action它简化了这些任务。本文将详细解析该步骤如何设置 JDK 并启用 Maven 依赖缓存。2. actions/setup-java 概述actions/setup-java是 GitHub 官方提供的 Action用于在 runner 环境中设置指定的 Java 开发工具包JDK版本。它的核心功能包括JDK 安装与配置自动下载、安装并配置指定版本如 Java 8, 11, 17, 21的 JDK。环境变量设置自动设置JAVA_HOME和将 JDK 的bin目录添加到PATH。构建工具集成支持 Maven、Gradle 等并能与依赖缓存功能协同工作。3. 基础用法设置 JDK以下是一个基础示例展示如何在 workflow 中使用actions/setup-java来设置 JDK 17。jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Set up JDK 17 uses: actions/setup-javav4 with: java-version: 17 distribution: temurin # 可选指定发行版如 temurin, zulu, corretto参数说明java-version指定所需的 Java 版本支持主版本号如 8, 11, 17或精确版本。distribution指定 JDK 发行版默认为 temurinAdoptium Temurin。其他选项包括 zulu (Azul Zulu), corretto (Amazon Corretto) 等。执行此步骤后runner 中即可使用java -version和javac等命令。4. 启用 Maven 依赖缓存Maven 项目在每次构建时都会下载依赖这可能会消耗大量时间。actions/setup-java可以与 GitHub Actions 的缓存功能集成自动缓存 Maven 本地仓库~/.m2/repository从而显著提升后续构建的速度。- name: Set up JDK 17 with Maven cache uses: actions/setup-javav4 with: java-version: 17 distribution: temurin cache: maven # 关键参数启用 Maven 依赖缓存核心机制当cache: maven被设置时该步骤会自动计算项目pom.xml文件的哈希值如果存在多个模块则会考虑所有相关的pom.xml。此哈希值作为缓存的 key。如果缓存命中则直接恢复~/.m2/repository目录如果未命中或pom.xml发生变化则在构建结束后将新的依赖缓存起来。这确保了只有在依赖声明发生变化时才需要重新下载依赖。5. 完整工作流示例下面是一个集成了 JDK 设置、Maven 缓存和构建步骤的完整工作流示例。name: Java CI with Maven Cache on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Set up JDK 17 with Maven cache uses: actions/setup-javav4 with: java-version: 17 distribution: temurin cache: maven name: Build with Maven run: mvn -B clean compile --file pom.xml name: Run tests run: mvn -B test --file pom.xml6. 高级配置与技巧6.1 自定义缓存路径与 key除了使用默认的 Maven 缓存你还可以通过cache-dependency-path参数指定其他依赖文件如 Gradle 的build.gradle或gradle.lockfile来启用缓存。- name: Set up JDK with custom cache uses: actions/setup-javav4 with: java-version: 11 distribution: zulu cache: gradle cache-dependency-path: | **/build.gradle **/gradle.lockfile6.2 多 JDK 版本矩阵测试可以利用 GitHub Actions 的矩阵策略在多个 JDK 版本上并行运行测试。jobs: test: runs-on: ubuntu-latest strategy: matrix: java: [ 8, 11, 17, 21 ] steps: - uses: actions/checkoutv4 - name: Set up JDK ${{ matrix.java }} uses: actions/setup-javav4 with: java-version: ${{ matrix.java }} cache: maven - run: mvn -B test6.3 服务器发布配置如果你的项目需要发布到 Maven 中央仓库或 GitHub Packages可以在 setup-java 步骤中配置发布所需的设置。- name: Set up JDK for publishing uses: actions/setup-javav4 with: java-version: 17 distribution: temurin cache: maven server-id: github # 用于发布到 GitHub Packages server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE7. 总结actions/setup-java步骤是 GitHub Actions 中构建 Java 项目的基石。通过java-version和distribution参数它可以灵活地设置所需的 JDK 环境。而cache: maven参数则能智能地缓存依赖大幅减少构建时间。结合矩阵测试、自定义缓存路径等高级功能可以构建出高效、可靠的 Java CI/CD 流水线。建议在实际项目中始终启用依赖缓存并定期检查actions/setup-java的版本更新以获取性能改进和新特性支持。
RELATED

相关推荐

【小程序课程设计/毕业设计】基于小程序的地方畲族非遗资源数字化交易系统的设计与实现 SpringBoot 驱动的畲族文化社群交流与产品售卖系统【附源码、数据库、万字文档】

【小程序课程设计/毕业设计】基于小程序的地方畲族非遗资源数字化交易系统的设计与实现 SpringBoot 驱动的畲族文化社群交流与产品售卖系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

📅 2026/9/2 20:41:23
电脑远程控制软件哪个好用 如何远程控制另一台电脑

电脑远程控制软件哪个好用 如何远程控制另一台电脑

不少职场人、多主机玩家都会纠结电脑远程控制软件哪个好用,市面上多数工具很难满足长时间稳定操控需求。电脑远程控制软件哪个好用呢?想要兼顾流畅度与画面表现,推荐无界趣连2.0。不管是用笔记本远程调取工位主机资料,还是低配办公…

📅 2026/9/2 16:47:41
小程序 毕设项目:智慧校园心理健康服务管理平台的设计与实现 高校心理问诊预约与咨询记录管理系统的设计与实现 (源码+文档,讲解、调试运行,定制等)

小程序 毕设项目:智慧校园心理健康服务管理平台的设计与实现 高校心理问诊预约与咨询记录管理系统的设计与实现 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

📅 2026/9/2 20:40:03
MORE NEWS

更多资讯

📰

AI工作流选型:3个隐形断点决定工具生死

1. 这不是工具测评,是一场持续147天的“AI生存实验”我从2023年10月开始,把日常工作中所有能被AI替代的环节——写周报、改PPT文案、查竞品资料、生成会议纪要、整理客户反馈、甚至给实习生写代码注释——全部交给AI来跑。不是试用一两天,而是…

📰

STM32嵌入式AI编程:从提示工程到硬件验证的全流程重构

1. 这不是“用AI写代码”,而是重构整个STM32开发范式我第一次把一个完整的STM32F407最小系统从零跑通FreeRTOSLVGL以太网协议栈,花了整整17天——光是CubeMX配置时钟树就卡了三天,反复核对参考手册第58页的PLL分频公式,手算出来的…

📰

变频器频繁启动的隐忧:热循环疲劳与IGBT寿命优化指南

搞设备的这些年,我对一句话越来越有体会:设备不是用坏的,而是“折腾”坏的。尤其是在用变频器驱动电机的场合,真正让一套驱动系统折寿的,往往不是连续运行的大负载,而是那些看起来不起眼的频繁启动。电梯、…

📰

Agent驱动的技术美术管线:从脚本到智能体的实战升级

开头我先说个真实场景:美术同学上周还在为两千张贴图批量改 sRGB 的事熬夜,昨天又开始给 UI 做按钮热区适配;TA 同事写的批处理脚本则越补越厚,最后连原作者自己都不敢动。Unreal 那边也一样,材质批量替换、Cesium 水印…

📰

Vue3实战案例合集:从响应式原理到状态管理的最佳实践

简介:这套基于Vue3的案例合集,围绕搜索历史记录、购物车、TodoList、回到顶部、图书管理等五类常见业务场景展开,适合正在学习Vue3或准备用其开发实际项目的开发者参考。资源共450个文件、压缩包仅3.17MB,其中以121个vue组件、106…

📰

圆桌论坛怎么听-Panel提问设计与价值获取方法

摘要 在技术大会的议程中,圆桌论坛(Panel)常被视为"茶歇前奏"——听众放松、内容发散、记不住要点。但在 2026 奇点智能技术大会(11 月 20-21 日 北京万达文华酒店)的议程架构中,Keynote 之后紧…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬