• 搭建 Maven 仓库


    如果 jar 包在本地,只能每次手动导入,不太方便。可以使用以下方式搭建一个 Maven 仓库

    1、使用 GitHub Pages 搭建公有仓库

    jar 包本质上是一个静态文件,所以可以使用 GitHub 来存放,再利用 GitHub Pages 提供一个地址让其可直接访问下载。

    jar 发布方

    pom.xml 配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>wang.depp</groupId>
    	<artifactId>substruction-common</artifactId>
    	<version>1.0.0</version>
    	<name>substruction-common</name>
    	<description>Substruction common jar</description>
    
    	<distributionManagement>
    		<repository>
    			<id>local-repo-release</id>
    			<name>GitHub Release</name>
    			<url>file://${project.basedir}/maven-repo</url>
    		</repository>
    	</distributionManagement>
    
    	<build>
    		<plugins>
    			<plugin>
    				<artifactId>maven-source-plugin</artifactId>
    				<executions>
    					<execution>
    						<id>attach-sources</id>
    						<phase>package</phase>
    						<goals>
    							<goal>jar-no-fork</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    			<plugin>
    				<artifactId>maven-javadoc-plugin</artifactId>
    				<executions>
    					<execution>
    						<id>attach-javadocs</id>
    						<phase>package</phase>
    						<goals>
    							<goal>jar</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>8</source>
    					<target>8</target>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

    <distributionManagement> 是配置本地打包后的文件的路径,当运行 mvn clean package deploy 后,将发布到根路径的 maven-repo 文件夹。id 和 name 可以随便填写。

    默认打包后将包含 jar 包,和 pom 文件。可以添加 2 个插件,使其可以生成 source 源文件 jar 和 javadoc 文档 jar 包。

        maven-repo
        └── depp
            └── wang
                └── substruction-common
                    ├── 1.0.0
                    │   ├── substruction-common-1.0.0-javadoc.jar
                    │   ├── substruction-common-1.0.0-javadoc.jar.md5
                    │   ├── substruction-common-1.0.0-javadoc.jar.sha1
                    │   ├── substruction-common-1.0.0-sources.jar
                    │   ├── substruction-common-1.0.0-sources.jar.md5
                    │   ├── substruction-common-1.0.0-sources.jar.sha1
                    │   ├── substruction-common-1.0.0.jar
                    │   ├── substruction-common-1.0.0.jar.md5
                    │   ├── substruction-common-1.0.0.jar.sha1
                    │   ├── substruction-common-1.0.0.pom
                    │   ├── substruction-common-1.0.0.pom.md5
                    │   └── substruction-common-1.0.0.pom.sha1
                    ├── maven-metadata.xml
                    ├── maven-metadata.xml.md5
                    └── maven-metadata.xml.sha1
    

    md5 为消息摘要算法,用于检验 jar 包是否被修改?将消息摘要散列生成一串字符串,下载时,再次散列一次,判断结果是否一致?

    因代码里包含 Lambda 表达式,不能使用默认 Maven 1.5 的编译器,需要使用 8 或以上的编译器。maven-compiler-plugin

    当 push 到 GitHub 后,给项目开启 GitHub Pages,直接访问 https://depp.wang/substruction-common/ 将打开根目录 index.html 文件

    引用方

    		<dependency>
    			<groupId>wang.depp</groupId>
    			<artifactId>substruction-common</artifactId>
    			<version>1.0.0</version>
    		</dependency>
    

    除了正常引用依赖外,还需要指明依赖 jar 获取地址

    	<repositories>
    		<repository>
    			<id>substruction-common</id>
    			<name>The Maven Repository on Github</name>
    			<url>https://depp.wang/substruction-common/maven-repo/</url>
    		</repository>
    	</repositories>
    

    2、使用 GitHub Packages 搭建私有仓库

    相关教程:发布 Artifact

    GitHub Setting -> Developer settings -> Personal access tokens 新建 Token,至少选择 repo、write:packages、read:packages

    发布方

    settings.xml 配置 GitHub 账号密码(token)

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
        <pluginGroups></pluginGroups>
        <proxies></proxies>
        
        <servers>
            <server>
                <id>github-release</id>
                <username>your-github-name</username>
                <password>e1a589c**01027697e</password>
            </server>
        </servers>
    
        <mirrors></mirrors>
        <profiles></profiles>
    </settings>
    

    pom.xml 配置仓库地址

    	<distributionManagement>
    		<repository>
    			<id>github-release</id>
    			<name>GitHub Release</name>
    			<url>https://maven.pkg.github.com/DeppWang/provider-client</url>
    		</repository>
    	</distributionManagement>
    

    id 需要和 settings.xml 的 id 相同。通过此 id 查找 settings.xml 的账号密码。url 所包含的 provider-client 无需在 package 中新建,但必须存在一个同名仓库,因为 Package 本质上是依赖于仓库实现的

    否则可能遇到的错误:

    Failed to deploy artifacts: Could not find artifact ** in github-release (https://maven.pkg.github.com/DeppWang/provider-client)
    

    当发布后,更新版本再次发布时,可能遇到 409 的错误:

    provider-client: Failed to deploy artifacts: Could not transfer artifact wang.depp:provider-client:jar:sources:1.0.2 from/to github-release (https://maven.pkg.github.com/DeppWang/provider-client): Failed to transfer file https://maven.pkg.github.com/DeppWang/provider-client/wang/depp/provider-client/1.0.2/provider-client-1.0.2-sources.jar with status code 409
    

    此时可能已经发布成功了,可查看 package

    引用方

    pom.xml 配置 repository

    	<repositories>
    		<repository>
    			<id>github-release</id>
    			<name>GitHub Release</name>
    			<url>https://maven.pkg.github.com/deppwang/provider-client</url>
    		</repository>
    	</repositories>
    
    	<dependencies>
    		<dependency>
    			<groupId>wang.depp</groupId>
    			<artifactId>provider-client</artifactId>
    			<version>1.0.6</version>
    		</dependency>
        </dependencies>
    

    如果引用方和发布方不是一台电脑需要额外申请一个具有 repo、read:packages 的 Token?可否使用同一个 token?

    3、使用 Nexus 免费版搭建私有仓库

    上面这种方式依赖于项目,无法集中管理所有的 jar 包,还需要设置 settings.xml。使用 Nexus 免费版搭建私有仓库是一个更好的方式。相关教程:Installation

    当需要将自己开发的 jar 包同步到中央仓库,以供所有人下载使用时,可使用 Sonatype 来实现,相关教程:发布 Artifact

    参考链接

  • 相关阅读:
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    Luogu P3975 [TJOI2015]弦论
    【模板】后缀自动机 (SAM)
    停用FF新鲜事/FF新推荐
    模板汇总
    Luogu P4467 [SCOI2007]k短路(模板)
    【模板】 最短路
    Luogu P5960 【模板】差分约束算法
  • 原文地址:https://www.cnblogs.com/deppwang/p/13914382.html
Copyright © 2020-2023  润新知