base64是哪个jar包的_基于Github Actions发布Maven包

2ced44d68b50585e1219d2fcef120d01.png

在本文中,我们将介绍如何使用Github Actions发布Maven项目包。

Maven

在构建一个CI Pipeline前,我们首先需要配置项目的Maven设置。

入门

Maven引用项目由三组独特的坐标组成:

  1. Group ID
  2. Artifact ID
  3. Version

比如,一个简单的Maven项目的坐标可以如下:

pom.xml

io.github.tinykingsamples1.0-SNAPSHOT

项目打包编译后会生成一个jar文件。

我们一个在项目version中增加一个-SNAPTHOT来标记这个是一个快照版本。快照版本表示该项目版本正在开发中,是一个非正式发布的版本。

一些项目在最终发布之前提供里程碑或发布候选版本。在这种情况下,Maven本身并没有为此提供命名方案。例如,Spring框架将. mx、. rcx和. release附加到版本中。它们不被认为是快照。

版本管理

Maven Release plugin管理发布过程。它提供了两个互补的目标,准备和执行。他们做以下工作:

准备

  1. 修改pom中版本号,从x-SNAPSHOT修改为一个新的版本
  2. 转换POM中的SCM信息,以包含标记的最终目的地
  3. 提交修改后的POM
  4. 用版本名标记SCM中的代码
  5. 将POM中的版本修改为一个新值y-SNAPSHOT
  6. 提交修改后的pom文件

执行

  1. 从带有可选标签的SCM URL中签出
  2. 运行预定义的Maven deploy

对于所需的SCM信息,Maven POM提供了一个专门的部分来配置它。

scm:git:https://github.com/tinyking/samples.git

身份认证

上面的代码片段支持不同的协议:git、http、https、ssh,甚至文件。使用git协议进行身份验证需要SSH密钥。

因此,上面的配置片段需要使用http协议。这需要用户/密码对形式的凭据。Maven从跨项目共享的数据(如安全相关数据)中分离出特定项目的数据。POM负责前者,而$HOME/.m2/settings.xml文件保存后者。

每个凭据对都需要一个惟一的标识符。

~/.m2/settings.xml

githubmy_usernammy_password

github是我们配置的一个唯一识别符。

为了在Maven项目中使用中指定的server, 我们需要在pom中增加project.scm.id的属性配置,告诉Maven使用哪个server:

pom.xml

github

这样,我们的Maven项目就会使用settings.xml中配置的id为github的server信息。

Distribution management

Maven作者围绕插件架构设计了Maven。Maven本身只提供一个构建生命周期,以及一组构建阶段。Maven引擎按顺序调用每个阶段;如果没有经历早期阶段,周期就不能进入后期阶段。例如,构建生命周期中的阶段包括编译、测试、集成测试、打包和部署。不先运行编译就不能运行测试。

我们可以将插件目标绑定到特定阶段。默认情况下,Maven绑定两个目标。例如,包阶段绑定maven-jar-plugin:jar目标。运行mvn包将依次执行所有阶段的所有目标限制,直到包结束。

release:perform :启动运行部署阶段的Maven fork。默认情况下,Maven将Maven部署插件的deploy:deploy目标绑定到deploy。这意味着Maven之前已经运行了绑定到包阶段的目标。由于这个原因,构建工件在部署启动时可用。部署意味着Maven将把工件推到需要显式配置的注册中心。

在这个项目的上下文中,制品是一个JAR,注册表是GitHub。这可以转化为下面的配置片段:

githubGitHubhttps://maven.pkg.github.com/tinyking/samples

Maven命令

编译命令需要执行release:prepare和release:perform.

默认情况下,release:prepare是一个交互过程,插件询问发布版本是什么,以及新的快照版本是什么。这在CI的情况下是行不通的,我们需要它们自动执行。

可以使用命令行-B标志以批处理模式运行Maven。在这种情况下,插件会自动推断发布版本和快照版本。

命令如下:

mvn -B release:prepare release:perform

Maven包装

最后的准备步骤是完全独立于Maven版本。

将来,用于构建项目的特定Maven版本可能不再可用。当时可用的版本可能与它不兼容。由于这个原因,Maven插件提供了一个包装器。包装器自可执行的JAR,它可以启动特定版本的mvn工具,而与环境无关。创建这样的包装器很简单:

mvn -N io.takari:maven:wrapper

这会在项目内部创建几个文件,包括.mvn文件夹。您需要在SCM中添加所有这些文件。


从现在开始,您应该使用位于项目根目录的mvnw脚本,而不是使用mvn命令。构建不再需要本地Maven安装。

基于Github构建

现在我们已经配置了POM,现在是时候在GitHub构建中集成Maven了。

现有的CI工具使用存储在存储库根的配置文件:

93ca5419fcc92b96f8592faef5dfba86.png

GitHub的操作也采用类似的方法,但有两个重要的区别:

  1. 该项目可以使用多个构建文件—称为工作流
  2. 需要将配置文件放到$PROJECT_ROOT/.github/workflows文件夹中

构建步骤

第一步我们需要签出项目

release.yml

- name: Checkout project  uses: actions/checkout@v2

接下来我们需要安装JDK

release.yml

- name: Setup Java JDK  uses: actions/setup-java@v1.4.2  with:    java-version: 14                        server-id: github     

因为发布:准备实际提交,有必要配置用户和电子邮件使用:

release.yml

- name: Configure Git user  run: |    git config user.email "actions@github.com"    git config user.name "GitHub Actions"

最后一步实际上是最直接的。只需从上面运行Maven命令。

release.yml

- name: Publish JAR  run: ./mvnw -B release:prepare release:perform  env:    GITHUB_TOKEN: $  

验证

当主分支准备好发布时,只需将它推到发布分支:

git push origin master:release

在Action中我们就可以看到执行记录了

f82f59eea7b9efccc58037d8717cc5a3.png

结论

管理带有GitHub操作的Maven发行版并不是一件简单的事情。然而,它只需要一点经验就可以使它工作。我希望这篇文章能够通过提供这种体验来帮助Maven用户充分利用GitHub动作的强大功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值