Apache Maven SCM 发布插件

maven-scm-publish-plugin 是一个实用插件,允许将 Maven 网站发布到任何支持的 SCM。主要目标是拥有一个实用插件以允许 Apache 项目通过ASF svnpubsub 系统发布 Maven 网站。

除了 SCM 操作之外,它还负责修复maven-site-plugin生成的换行不一致(请参阅MSITE-121),这会阻止简单的内容导入到 SCM。

该插件也已经使用 Git SCM 进行了测试,例如可以推送 GitHub Pages 的内容

执行

默认情况下,该插件在分阶段网站上工作(请参阅内容参数)。

默认情况下,它首先将目录的内容从 SCM(请参阅pubScmUrl参数)检出到target/scmpublish-checkout(请参阅checkoutDirectory参数)。

然后将本地暂存的内容应用于签出,发出适当的 SCM 命令来添加和删除条目,然后签入。

插件的scmpublish.dryRun参数避免了所有 SCM 操作,并简单地注销添加、删除和更改的文件。

scmpublish.skipCheckin参数省略了最终签入这允许您访问target/scmpublish-checkout,并在提交到 SCM 之前验证其内容。

将任何内容发布到 SCM

即使没有任何pom.xml /Maven 项目,您也可以使用本地内容更新 SCM 内容:

mvn scm-publish:publish-scm -Dscmpublish.pubScmUrl=scm:<scm-provider>... -Dscmpublish.content=...path-to-content...

SCM 内容将被签出到一个临时目录,然后本地内容将应用于签出,然后再签入。

有关示例,请参见maven.apache.org 内容导入脚本。

请参阅一些提示

已知限制

有 2 个已知限制:

  • 对于 Subversion,如果初始 SCM 目录不存在,插件可以创建它。但是以 Git 为例,如果您使用分支,则不会创建分支:您必须手动创建它
  • 该插件适用于发布到完整目录的多模块网站:您只需要发布mvn site:stage内容。但是,如果一个模块没有将其内容发布到同一目录(如 Surefire 或 Enforcer,它们在/plugins/中有一个基本目录和一个插件),则不能简单地导入此暂存区域。

未来的梦想

理想情况下,POM 的<distributionManagement > 部分将支持 scm url ,然后发布将只是mvn site-deploy,对于非平面多模块站点没有任何问题。

要实现这样的梦想,有几个步骤:

  • 修复由maven-site-plugin生成的不一致的换行符(由site.vm模板和从皮肤 jar 中获取的资源而没有修复换行符):MSITE-121在 maven-site-plugin 3.4 中得到修复,
  • 改进wagon-scm以将整个目录内容放在一次提交中,而不是每个文件一次提交。

那么这个插件就会过时,取而代之的是自然的maven-site-plugin:deploy目标。