如何使用GitHub建立Maven私有倉庫

流年的夏天發表於2020-11-22

Github上建立倉庫】

首先,在GitHub上建立自己的倉庫(mvn-repo):

clip_image001[6]

 

【配置本地setting檔案】

找到本地的maven settings檔案,配置server

clip_image002[6]

有兩種選擇,可以選擇配置usernamepassword,或者選擇配置Personal access tokens<OAUTH2TOKEN>(也是填充到password欄位)。

優先使用Personal access tokens,因為有些公司內部可能會對使用者名稱和密碼做限制(我也不知道為什麼)。

前者即是GitHub的使用者名稱以及密碼,後者需要在GitHub上進行申請,步驟如下:

clip_image003[6]

 

clip_image004[6]

 

clip_image005[6]

 

選擇對應的許可權,並標註Note

clip_image006[6]

然後點選檢視:

clip_image007[6]

 

clip_image008[6]

上圖紅框即是你的personal access token。

 

 注:token會不斷髮生變化,每一次檢視都會更新,更新後之前的不可用,所以要妥善儲存。

 

【增加本地臨時儲存庫】

pom檔案中增加

<build>
    <plugins>
        <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.8.2</version>
            <configuration>
                <!-- altDeploymentRepository :指定替代方案應該部署專案工件的儲存庫(除了指定的工件)。 -->
                <altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo
                </altDeploymentRepository>
            </configuration>
        </plugin>
    </plugins>
</build>

 

然後執行mvn clean deploy

clip_image009[6]

clip_image010[6]

如下圖,版本已經正確地釋出到本地指定的儲存庫中了。

clip_image011[6]

 

【配置遠端的github服務

pom檔案中增加以下幾行:

<properties>
    <github.global.server>github</github.global.server>
</properties>

 

【釋出到遠端的github指定的倉庫

pom檔案中配置以下幾行:

 

<!--原始碼-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<!--github上傳外掛,用於修改後的釋出,執行 mvn clean deploy 自動打包上傳到github-->
<plugin>
    <groupId>com.github.github</groupId>
    <artifactId>site-maven-plugin</artifactId>
    <version>0.12</version>
    <configuration>
        <message>Creating site for ${project.artifactId} ${project.version}</message>
        <noJekyll>true</noJekyll>
        <!--本地jar地址, 對應上面的altDeploymentRepository-->
        <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
        <!--分支-->
        <branch>refs/heads/master</branch>
        <merge>true</merge>

        <includes>
            <include>**/*</include>
        </includes>
        <!--對應github上建立的倉庫名稱 name-->
        <repositoryName>mvn-repo</repositoryName>
        <!--github登入賬號 對應的密碼存在maven的setting.xml檔案中-->
        <!--由github組織擁有,則該值將是組織名稱,如果由使用者擁有,則該值將是使用者名稱-->
        <repositoryOwner>liufarui</repositoryOwner>
    </configuration>

    <executions>
        <execution>
            <goals>
                <goal>site</goal>
            </goals>
            <phase>deploy</phase>
        </execution>
    </executions>
</plugin>

 

再次執行mvn clean deploy命令即可釋出到GitHubmaven倉庫中。

clip_image012[6]

clip_image013[6]

如上圖即為成功;

 

我們可以檢視我們的mvn-repo專案,發現內容已經發生了變化:

clip_image014[6]

 

clip_image015[6]

 

【使用依賴包】

在新專案的pom檔案中增加以下行:

<repositories>
    <repository>
        <id>mvn-repo</id>
        <!-- https://raw.github.com/使用者名稱/倉庫名/分支名 -->
        <url>https://raw.github.com/liufarui/mvn-repo/master</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

 

在新專案的pom檔案中增加依賴:

<dependencies>
    <dependency>
        <groupId>com.github.liufarui</groupId>
        <artifactId>demo-maven-github-repo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

 

由於我們之前開發的這個是個maven外掛工程,所以增加以下行進行使用:

<build>
    <plugins>
        <plugin>
            <groupId>com.github.liufarui</groupId>
            <artifactId>demo-maven-github-repo</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </plugin>
    </plugins>
</build>

 

我們現在可以在右側Maven中看到我們的外掛

clip_image016[6]

 

執行看結果:

clip_image017[6]

 

demo地址】

以上,即是整個Github建立maven倉庫的內容,為了方便大家檢視學習,我把demo專案放到了我的github上,大家可以自行檢視,有問題也可以在評論區隨時討論:

clip_image018[6]

https://github.com/liufarui/code-demo

 

【問題】

[ERROR] Failed to execute goal com.github.github:site-maven-plugin:0.12:site (default) on project path: Error creating commit: Invalid request.

遇到以上問題是因為沒有設定姓名,在setting中進行設定:

clip_image019[6]

 

Error creating blob: cannot retry due to server authentication, in streaming mode

很多人都遇到了此問題,此問題一般是許可權問題,有可能是使用者名稱密碼不對,也有可能是公司網路做了特殊的限制,還有一些奇怪的原因,一般可以通過配置Personal access tokens去解決,附上網上的討論連結:

https://github.com/github/maven-plugins/issues/36

 

 以上,是如何搭建私有的maven倉庫,這個倉庫必須是有個人賬戶認證才可以使用的,無法確保大家可以一起用,之後,會再寫一篇如何搭建public倉庫的部落格。

相關文章