1. 概述

在本教程中,我们将了解如何使用 site-maven 插件 在 GitHub 上托管带有源的 Maven 存储库。这是使用 Nexus 等存储库的经济实惠的替代方案。

2. 前提条件

如果我们还没有,我们需要在 GitHub 上为 Maven 项目创建一个存储库。在本文中,我们使用一个存储库“ host-maven-repo-example ”和分支“ main ”。这是 GitHub 上的一个空存储库:

第一个 1 2

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-examplerepositoryOwner 标签值将是 eugenp

现在,我们将 执行 mvn deploy 命令将工件上传到 GitHub 。如果 分支不存在,将自动创建。成功构建后,在浏览器中和 分支下检查 GitHub 上的存储库。我们所有的二进制文件都将出现在存储库中。

在我们的例子中,它看起来像这样:

最后 1

六,结论

最后,我们了解了如何使用 site-maven-plugin 在 GitHub 上托管 Maven 工件。

与往常一样,这些示例的代码可在 GitHub 上获取。