You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action:如何在测试中替换文件中的字符串

简介

我目前正在开发一款GitHub Action,希望验证其是否适配多个Java版本。为此,我需要在每次测试时更新pom.xml文件,并修改其中的Java版本配置。

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.pseudo</groupId>
    <artifactId>template</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>


    <name>template</name>
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>JAVAVERSION</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>
</project>
问题

请问如何在每次测试中实现文件内字符串的替换操作?


解决方案

方法1:Shell命令直接替换文件内容

在GitHub Actions工作流中,可通过平台对应的shell命令替换pom.xml里的JAVAVERSION占位符,结合版本矩阵就能批量测试多个Java版本:

Linux/macOS runner(sed命令)

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java-version: [8, 11, 17, 21] # 要测试的Java版本列表
    steps:
      - uses: actions/checkout@v4
      - name: 替换pom.xml中的Java版本
        run: sed -i 's/JAVAVERSION/${{ matrix.java-version }}/g' pom.xml
      - name: 配置对应Java版本
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java-version }}
          distribution: 'temurin'
      - name: 执行Maven测试
        run: mvn test

Windows runner(PowerShell命令)

如果需要兼容Windows环境,用PowerShell的文本替换命令:

- name: 替换pom.xml中的Java版本
  run: (Get-Content pom.xml) -replace 'JAVAVERSION', '${{ matrix.java-version }}' | Set-Content pom.xml

方法2:Maven命令行覆盖属性(更推荐)

不需要修改pom.xml文件,Maven支持在命令行直接覆盖属性值,更简洁且避免文件修改:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java-version: [8, 11, 17, 21]
    steps:
      - uses: actions/checkout@v4
      - name: 配置对应Java版本
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java-version }}
          distribution: 'temurin'
      - name: 执行Maven测试(覆盖Java版本属性)
        run: mvn test -Djava.version=${{ matrix.java-version }}

这种方式下,maven.compiler.source和maven.compiler.target会自动继承java.version的新值,完全满足多版本测试需求。


内容的提问来源于stack exchange,提问作者Rasbypy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:55:14