GitHub Actions构建Maven报Non-readable POM错误修复方案
错误根因
报错本质是运行环境里根本不存在目标仓库的代码:你不管是自定义Action源码还是调用方的工作流配置,都没有加代码检出步骤,GitHub Runner启动后工作目录是空的,Maven执行时自然找不到pom.xml文件。
修复方法
两种方案,推荐第一种,减少使用者的配置成本:
方案1:将代码检出逻辑内置到自定义Action中
在自定义composite Action的runs.steps最顶部(所有构建、JDK配置步骤之前),添加官方代码检出步骤:
- name: Checkout repository uses: actions/checkout@v3
调整后Action的steps开头结构参考:
runs: using: "composite" steps: # 新增的检出步骤,放在最前面 - name: Checkout repository uses: actions/checkout@v3 - name: Set up JDK 17 for deploy to OSSRH uses: actions/setup-java@v2 with: distribution: "adopt" java-version: ${{ inputs.java-version }} server-id: ossrh server-username: ${{ inputs.nexus-username }} server-password: ${{ inputs.nexus-password }} gpg-private-key: ${{ inputs.gpg-private-key }} gpg-passphrase: ${{ inputs.gpg-passphrase }} # 原有后续步骤保持不变
方案2:在调用方工作流中手动加检出步骤
如果不想把检出逻辑内置到Action里,就在调用Action的工作流中,先执行代码检出,再调用你的发布Action:
jobs: publish: runs-on: ubuntu-latest steps: # 新增检出步骤 - name: Checkout code uses: actions/checkout@v3 - name: Maven Library build and publish uses: MathieuSoysal/Java-maven-library-publisher@v1.0.1 with: nexus-username: ${{ secrets.NEXUS_USERNAME }} nexus-password: ${{ secrets.NEXUS_PASSWORD }} gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} github-token: ${{ secrets.GITHUB_TOKEN }} java-version: 17
其他需要顺手修复的问题
你的Action里还有两个逻辑问题,不改的话就算解决了pom找不到的问题,后续发布也会出问题:
- 版本更新步骤顺序错误:现在是先执行
mvn package打包,再执行版本号修改,打出来的产物版本和你要发布的版本不一致,需要把版本更新步骤移到Maven构建步骤之前。 - MAVEN_OPTS配置无效:单独用
export设置环境变量的步骤只在当前shell会话生效,步骤执行完变量就销毁了,后续的mvn deploy步骤拿不到这个配置,需要把这个参数直接写到对应deploy步骤的run命令里,或者配置到步骤的env块中。
内容的提问来源于stack exchange,提问作者ThrowsError
相关产品推荐
相关产品推荐

