maven repository 私人仓库怎么搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven repository 私人仓库怎么搭建相关的知识,希望对你有一定的参考价值。

方法:

1.基于artifactId准备路径,将artifactId连接到后面:org/testng/testng

2.使用version准备路径,将version连接到后面:org/testng/testng/5.8

3.将artifactId于version以分隔符连字号连接到后面:org/testng/testng/5.8/tesng-5.8

4.判断如果构件有classifier,就要在 第4项 后增加 分隔符连字号 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5

5.检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar

    6、基于groupId准备路径,将句点分隔符转成路径分隔符,就是将  "."  转换成 "/" ; example: org.testng --->org/testng

参考资料

Maven详解之仓库------本地仓库、远程仓库.研发管理[引用时间2017-12-28]

参考技术A 简单来说,共有三步:
deploy到本地目录
把本地目录提交到gtihub上
配置github地址为仓库地址
配置local file maven仓库
deploy到本地
maven可以通过http, ftp, ssh等deploy到远程服务器,也可以deploy到本地文件系统里。
例如把项目deploy到/home/hengyunabc/code/maven-repo/repository/目录下:
<distributionManagement>
<repository>
<id>hengyunabc-mvn-repo</id>
<url>file:/home/hengyunabc/code/maven-repo/repository/</url>
</repository>
</distributionManagement>

通过命令行则是:
mvn deploy -DaltDeploymentRepository=hengyunabc-mvn-repo::default::file:/home/hengyunabc/code/maven-repo/repository/

推荐使用命令行来deploy,避免在项目里显式配置。
https://maven.apache.org/plugins/maven-deploy-plugin/
https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
把本地仓库提交到github上
上面把项目deploy到本地目录home/hengyunabc/code/maven-repo/repository里,下面把这个目录提交到github上。
在Github上新建一个项目,然后把home/hengyunabc/code/maven-repo下的文件都提交到gtihub上。
cd /home/hengyunabc/code/maven-repo/
git init
git add repository/*
git commit -m 'deploy xxx'
git remote add origin git@github.com:hengyunabc/maven-repo.git
git push origin master

最终效果可以参考我的个人仓库:
https://github.com/hengyunabc/maven-repo
github maven仓库的使用
因为github使用了raw.githubusercontent.com这个域名用于raw文件下载。所以使用这个maven仓库,只要在pom.xml里增加:
<repositories>
<repository>
<id>hengyunabc-maven-repo</id>
<url>https://raw.githubusercontent.com/hengyunabc/maven-repo/master/repository</url>
</repository>
</repositories>

目录查看和搜索
值得注意的是,github因为安全原因,把raw文件下载和原来的github域名分开了,而raw.githubusercontent.com这个域名是不支持目录浏览的。所以,想要浏览文件目录,或者搜索的话,可以直接到github域名下的仓库去查看。
比如这个文件mybatis-ehcache-spring-0.0.1-20150804.095005-1.jar:
浏览器地址是:
https://github.com/hengyunabc/maven-repo/blob/master/repository/io/github/hengyunabc/mybatis-ehcache-spring/0.0.1-SNAPSHOT/mybatis-ehcache-spring-0.0.1-20150804.095005-1.jar
它的maven仓库url是:
https://raw.githubusercontent.com/hengyunabc/maven-repo/master/repository/io/github/hengyunabc/mybatis-ehcache-spring/0.0.1-SNAPSHOT/mybatis-ehcache-spring-0.0.1-20150804.095005-1.jar
maven仓库工作的机制
下面介绍一些maven仓库工作的原理。典型的一个maven依赖下会有这三个文件:
https://github.com/hengyunabc/maven-repo/tree/master/repository/io/github/hengyunabc/mybatis-ehcache-spring/0.0.1-SNAPSHOT
maven-metadata.xml
maven-metadata.xml.md5
maven-metadata.xml.sha1

maven-metadata.xml里面记录了最后deploy的版本和时间。

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>io.github.hengyunabc</groupId>
<artifactId>mybatis-ehcache-spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20150804.095005</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20150804095005</lastUpdated>

</versioning>
</metadata>

其中md5, sha1校验文件是用来保证这个meta文件的完整性。
maven在编绎项目时,会先尝试请求maven-metadata.xml,如果没有找到,则会直接尝试请求到jar文件,在下载jar文件时也会尝试下载jar的md5, sha1文件。
maven-metadata.xml文件很重要,如果没有这个文件来指明最新的jar版本,那么即使远程仓库里的jar更新了版本,本地maven编绎时用上-U参数,也不会拉取到最新的jar!
所以并不能简单地把jar包放到github上就完事了,一定要先在本地Deploy,生成maven-metadata.xml文件,并上传到github上。
参考:http://maven.apache.org/ref/3.2.2/maven-repository-metadata/repository-metadata.html
maven的仓库关系
https://maven.apache.org/repository/index.html

配置使用本地仓库
想要使用本地file仓库里,在项目的pom.xml里配置,如:
<repositories>
<repository>
<id>hengyunabc-maven-repo</id>
<url>file:/home/hengyunabc/code/maven-repo/repository/</url>
</repository>
</repositories>

注意事项
maven的repository并没有优先级的配置,也不能单独为某些依赖配置repository。所以如果项目配置了多个repository,在首次编绎时,会依次尝试下载依赖。如果没有找到,尝试下一个,整个流程会很长。
所以尽量多个依赖放同一个仓库,不要每个项目都有一个自己的仓库。

maven setting 配置仓库,pom.xml中repository不起作用

问题描述

最近做java项目,需要使用公司自己搭建的maven仓库,但是有些包公司的仓库中没有,导致下载失败。

项目环境

jdk:1.8

maven:3.5

问题原因分析

maven的setting文件配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
    <localRepository>/data/repository</localRepository>
    <servers>
        <server>
            <id>releases</id>
            <username>123</username>
            <password>123</password>
        </server>
        <server>
            <id>snapshots</id>
            <username>123</username>
            <password>123</password>
        </server>
    </servers>
    <mirrors>
        <!--注意标红的部分-->
        <mirror>
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://server.dev.****.com:8000/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>

 

pom.xml中的配置:

<repositories>
			<repository>
			<id>aliyun-repos</id>
			<url>https://maven.aliyun.com/repository/public</url>
			<releases><enabled>true</enabled></releases>
			<snapshots><enabled>false</enabled></snapshots>
		</repository>
        <repository>
		    <id>sonatype-repos-s</id>
			<name>Sonatype Repository</name>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
			<releases><enabled>false</enabled><updatePolicy>always</updatePolicy></releases>
			<snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
		</repository>
	</repositories>

  

我需要下载的包的仓库地址在pom文件中配置了,就是 https://oss.sonatype.org/content/repositories/snapshots,这个仓库,

但是为什么下载的时候没有起作用呢?问题就出在setting中如下部分:

<mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://server.dev.****.com:8081/nexus/content/groups/public/</url>
</mirror> 

mirrorof标签,这个标签如果设置为*,就说明整个工程只能使用settings中配置的地址,这个就是问题的根源。

解决办法

  在settings文件的mirrorof标签中内容改成(!sonatype-repos-s,*),括号里面的内容,不包括括号,这样做的意思是,!sonatype-repos-s意思是sonatype-repos-s这个仓库排除在外,依然把公司的仓库作为唯一仓库,这样就可以使用settings文件中配置的仓库和pom.xml配置的仓库都生效。

 

-------------------------------------------------------------分割线---------------------------------------------------------------

番外话:上面的问题产生的根本原因是,我们平时做项目时一般都是复制粘贴,根本不知道有些配置项什么意思,出了问题就百度,但是有时百度查不到时,还是要老老实实的从原理入手。

 

以上是关于maven repository 私人仓库怎么搭建的主要内容,如果未能解决你的问题,请参考以下文章

maven setting 配置仓库,pom.xml中repository不起作用

Maven 仓库搜索服务和私服搭建

Maven环境搭建

eclipse怎么设置maven仓库地址

系统环境搭建问题汇总

CentOS7搭建Maven的Nexus私服仓库