如何在GitHub同一Java Maven项目的master与develop分支生成两个可用包?
为Java Maven项目的master和develop分支分别生成GitHub Packages包的实现方法
核心思路是通过分支专属的版本号标识区分两个分支的包,配合GitHub Actions自动完成构建发布,确保两个分支的包独立可用。
1. 配置版本号规则
给master和develop分支的包设置不同的版本后缀,比如:
- master分支用正式版本号(如
1.0.0) - develop分支用带标识的版本号(如
1.0.0-develop或1.0.0-SNAPSHOT)
你可以通过Maven命令行参数动态覆盖版本,无需硬改pom.xml:
# master分支发布正式版 mvn deploy -Dproject.version=1.0.0 # develop分支发布开发版 mvn deploy -Dproject.version=1.0.0-develop
如果想在pom.xml里做更灵活的配置,可以用Maven profiles:
<profiles> <profile> <id>master</id> <activation> <property> <name>branch</name> <value>master</value> </property> </activation> <properties> <project.version>1.0.0</project.version> </properties> </profile> <profile> <id>develop</id> <activation> <property> <name>branch</name> <value>develop</value> </property> </activation> <properties> <project.version>1.0.0-develop</project.version> </properties> </profile> </profiles>
构建时指定profile:mvn deploy -Pmaster
2. 用GitHub Actions自动发布
创建.github/workflows/maven-publish.yml,实现分支推送时自动构建发布:
name: 自动发布Maven包 on: push: branches: [ master, develop ] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 配置JDK环境 uses: actions/setup-java@v4 with: java-version: '17' # 替换为你的项目JDK版本 distribution: 'temurin' server-id: github server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: 生成版本后缀 id: version-suffix run: | if [ "${{ github.ref }}" = "refs/heads/master" ]; then echo "suffix=" >> $GITHUB_OUTPUT else echo "suffix=-develop" >> $GITHUB_OUTPUT fi - name: 发布到GitHub Packages run: mvn deploy -DskipTests -Dproject.version=1.0.0${{ steps.version-suffix.outputs.suffix }} env: MAVEN_USERNAME: ${{ github.actor }} MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
这个工作流会在master或develop分支有代码推送时自动触发,根据分支生成对应版本号,跳过测试后发布到GitHub Packages。
3. 确保包可访问
- 进入GitHub仓库的「Packages」页面,检查包的可见性:如果需要公开访问,设置为「Public」;私有仓库则配置好访问权限,允许目标用户/团队查看下载。
- 其他项目引用时,直接指定对应版本号即可:
<!-- 引用master分支的正式包 --> <dependency> <groupId>你的GroupId</groupId> <artifactId>你的ArtifactId</artifactId> <version>1.0.0</version> </dependency> <!-- 引用develop分支的开发包 --> <dependency> <groupId>你的GroupId</groupId> <artifactId>你的ArtifactId</artifactId> <version>1.0.0-develop</version> </dependency>
可选:用快照版本管理开发分支
如果develop分支是持续迭代的,可以把版本后缀设为-SNAPSHOT,Maven会自动识别为快照包,支持自动拉取最新构建版本。只需把Actions里的suffix=-develop改成suffix=-SNAPSHOT即可。
内容的提问来源于stack exchange,提问作者Djonathan Kaiper
相关产品推荐
相关产品推荐

