1. 概述
在本教程中,我们将了解如何使用 site-maven 插件 在 GitHub 上托管带有源的 Maven 存储库。这是使用 Nexus 等存储库的经济实惠的替代方案。
2. 前提条件
如果我们还没有,我们需要在 GitHub 上为 Maven 项目创建一个存储库。在本文中,我们使用一个存储库“ host-maven-repo-example ”和分支“ main ”。这是 GitHub 上的一个空存储库:
3.Maven项目
让我们创建一个简单的 Maven 项目。我们将把该项目生成的工件推送到 GitHub。
这是项目的 pom.xml :
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.maven.plugin</groupId>
<artifactId>host-maven-repo-example</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<project>
首先,我们需要 在项目本地创建一个内部存储库 。在推送到 GitHub 之前,Maven 工件将部署到项目构建目录中的此位置。
我们将本地存储库定义添加到 pom.xml 中:
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-artifact</url>
</repository>
</distributionManagement>
现在,让我们 将 maven-deploy-plugin 配置添加 到 pom.xml 中。我们将使用此插件将工件添加到目录 ${project.build.directory}/mvn-artifact 中的本地存储库:
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<altDeploymentRepository>
internal.repo::default::file://${project.build.directory}/mvn-artifact
</altDeploymentRepository>
</configuration>
</plugin>
另外, 如果我们想将带有 Maven 工件的源文件推送到 GitHub,那么我们还需要包含源插件 :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
将上述配置和插件添加到 pom.xml 后,构建将在本地目录 target/mvn-artifact 中 部署 Maven 工件 。
现在, 下一步是将这些工件从本地目录部署到 GitHub 。
4.配置GitHub身份验证
在将工件部署到 GitHub 之前,我们将在 *~/.* m2/settings.xml 中配置身份验证信息。这是为了使 site-maven-plugin 能够将工件推送到 GitHub。
根据我们想要进行身份验证的方式,我们将在 settings.xml 中添加两个配置之一。接下来让我们检查这些选项。
4.1.使用 GitHub 用户名和密码
要使用 GitHub 用户名和密码,我们将在 settings.xml 中配置它们:
<settings>
<servers>
<server>
<id>github</id>
<username>your Github username</username>
<password>your Github password</password>
</server>
</servers>
</settings>
4.2.使用个人访问令牌
使用 GitHub API 或命令行时推荐的身份验证方法是使用个人访问令牌 (PAT) :
<settings>
<servers>
<server>
<id>github</id>
<password>YOUR GitHub OAUTH-TOKEN</password>
</server>
</servers>
</settings>
5. 使用 site-maven-plugin 将 Artifact 推送到 GitHub
最后一步是 配置 site-maven 插件 来推送我们的本地临时存储库 。此暂存存储库存在于 目标 目录中:
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<configuration>
<message>Maven artifacts for ${project.version}</message>
<noJekyll>true</noJekyll>
<outputDirectory>${project.build.directory}</outputDirectory>
<branch>refs/heads/${branch-name}</branch>
<includes>
<include>**/*</include>
</includes>
<merge>true</merge>
<repositoryName>${repository-name}</repositoryName>
<repositoryOwner>${repository-owner}</repositoryOwner>
<server>github</server>
</configuration>
<executions>
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
作为示例,对于本教程,假设我们有存储库 eugenp/host-maven-repo-example 。那么 repositoryName 标签值将是 host-maven-repo-example , repositoryOwner 标签值将是 eugenp 。
现在,我们将 执行 mvn deploy 命令将工件上传到 GitHub 。如果 主 分支不存在,将自动创建。成功构建后,在浏览器中和 主 分支下检查 GitHub 上的存储库。我们所有的二进制文件都将出现在存储库中。
在我们的例子中,它看起来像这样:
六,结论
最后,我们了解了如何使用 site-maven-plugin 在 GitHub 上托管 Maven 工件。
与往常一样,这些示例的代码可在 GitHub 上获取。