maven-nexus私服

2024-05-29 23:58
文章标签 maven 私服 nexus

本文主要是介绍maven-nexus私服,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

好文章  http://my.oschina.net/guanzhenxing/blog/209578


Nexus私服 

第一步:下载nexus-webapp-1.9.2.4.war包,然后拷贝到tomcat下的webapps目录中,改名字为:nexus.war

第二步:启动tomcat

第三步:访问http://localhost:8088/nexus/显示如下:

 

 

第四步:点击右上角“log in输入usernameadmin Passwordadmin123登录

 

 

第五步:登录成功


 

第六步:点击Views/Repositories Repositories

 

 

Nexus内置仓库说明:

1Maven Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。

从互联网中更新私服上索引

 

 

2Releases:这是一个策略为Release的宿主类型仓库,用来部署组织内部的正式发布版本构件,更加严格。

3Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的开发版本构件。

43rd party:这是一个策略为Release的宿主类型仓库,用来部署无法从互联网中央仓库获得的第三方发布版本构件,比如oracle的一些jar包(例如classe12.jar),由于受到商业版权的限制,不允许在中央仓库出现,如果想让这些包在私服上进行管理,就需要第三方的仓库。

5Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。

第七步:创建宿主目录和代理仓库

Hosted本地仓库(当前服务器),通常我们会部署自己的构件到这一类型的仓库。 

包括3rd party仓库,Releases仓库,Snapshots仓库

Proxy代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。 

Group仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。如果要将自己创建的仓库构建,通过私服也要查询出来,可以将自己创建的仓库构建部署到仓库组中。

Virtual:虚拟仓库,已经不用! 

 

注意:Hosted允许用户自己上传jar包,并可以下载使用

            Proxy不允许用户自己上传jar包,只能从中央仓库下载


中央仓库下的jar包都是从互联网下载的,有的在本地,有的仍在互联网仓库中。

如图:


带蓝色的jar表示已下载到私服的jar,不带蓝色的表示在互联网上的jar,还没有下载进私服中。


如果有现成的jar,可以直接替换私服的仓库,同时加上索引,如下:






第八步:创建仓库组

点击Public Repositories仓库,在Configurations栏中选取需要合并的仓库,点击箭头加到左边保存即可

 

 

第九步:下载Index索引并进行构建搜索(GAV搜索)

配置文件和顺序:MAVEN_HOME/conf/setting.xmlà~/.m2/setting.xmlàproject

第十步:配置所有构建均从私服下载,在~/.m2/setting.xml中配置如下:

<settings>

 <mirrors>

 <mirror>

 <!--此处配置所有的构均从私有仓库中下载 *代表所有,也可以写central -->

 <id>nexus</id>

 <!-- 拦截下来所有的仓库做镜像 -->

 <mirrorOf>*</mirrorOf>

 <url>http://192.168.3.100:8080/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>

 <id>central</id>

 <url>http://central</url>

 <releases><enabled>true</enabled></releases>

 <snapshots><enabled>true</enabled></snapshots>

 </pluginRepository>

 </pluginRepositories>

 </profile>

 </profiles>

<!-- 激活profiles -->

<activeProfiles>

 <!--make the profile active all the time -->

 <activeProfile>nexus</activeProfile>

 </activeProfiles>

 

其中:

1mirror置:表示私服仓库组的路径

 

2)为什么配置一个假的中央仓库地址,重写中央仓库的路径地址

保证不能从中央仓库地址,只能从私服的地址下载。

 

第十一步:Nexus的访问权限控制,在~/m2/setting.xml中配置如下:

<!-- 设置发布时的用户名 -->

 <servers>

<!-- releasessnapshots表示是上传到正式仓库还是开发仓库 -->

  <server>

 <id>releases</id>

<username>admin</username>

<password>admin123</password>

</server>

<server>

<id>snapshots</id>

<username>admin</username>

<password>admin123</password>

 </server>

 </servers>

 

第十二步:部署构建到Nexus,包含ReleaseSnapshot 在父项目(Parent)根目录中pom.xml中配置:

<!-- 依赖包发布到私服,将开发的包上传到宿主仓库-->

<distributionManagement> 

<!-- 上传到宿主仓库的releases -->

<repository> 

    <id>releases</id> 

    <name>Internal Releases</name> 

    <url>http://localhost:8080/nexus/content/repositories/releases/</url> 

</repository> 

<!-- 上传到宿主仓库的snapshots -->

<snapshotRepository> 

    <id>snapshots</id> 

    <name>Internal Snapshots</name> 

    <url>http://localhost:8080/nexus/content/repositories/snapshots/</url> 

</snapshotRepository> 

  </distributionManagement>

 

第十三步:将自己开发的仓库发布到私服上去,选择parent项目中的pom.xml。执行clean deploy。大家可以看到我们开发的项目已经上传到了私服上。

 

样例settings

样例pom



思考:将工程中所有的Snapshot改成Release,大家看看是什么效果?结果就是会在Releases的仓库中看到我们的项目包。

<groupId>zpeng..maven</groupId>

  <artifactId>parent</artifactId>

  <version>0.0.1-Release</version>

  <packaging>pom</packaging>



如何将classes12.jar上传到私服中的第三方仓库(之所以有些包只能上传到第三方仓库中,是因为这些涉及商业版权的问题,无法从互联网下载,所以如果想让这些包交给maven-nexus来管理,就必须将其上传至第三方仓库中)

第一步:选择3rd party,会看到下方的Artifact Upload

第二步:完成配置:

第三步:点击Add Artifact,最后点击upload Artifacts

第四步:查看上传的jar

第五步:查看上传的classes.jar包的坐标:


 




此时已经说明,私服上已经存在了6ck这个jar,如果我们本地开发人员使用的话,直接写上它的坐标即可。如下:


即会将私服的jar下载到本地仓库,如下:



完成classes.jar的包下载到本地仓库:

第一步:配置所有构建均从私服下载,在~/.m2/setting.xml中配置如下:

<settings>

 <mirrors>

 <mirror>

 <!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->

 <id>nexus</id>

 <!-- 拦截下来所有的仓库做镜像 -->

 <mirrorOf>*</mirrorOf>

  <!-- 仓库组地址 -->

<url>http://192.168.3.100:8080/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>

 <id>central</id>

 <url>http://central</url>

 <releases><enabled>true</enabled></releases>

 <snapshots><enabled>true</enabled></snapshots>

 </pluginRepository>

 </pluginRepositories>

 </profile>

 </profiles>

<!-- 激活profiles -->

<activeProfiles>

 <!--make the profile active all the time -->

 <activeProfile>nexus</activeProfile>

 </activeProfiles>

第二步:将classes.jar包的坐标放置到项目Hello中的pom.xml

<dependencies>

    <dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

</dependency>

<dependency>

  <groupId>cn.itcast.oracle</groupId>

  <artifactId>jdbc</artifactId>

  <version>10.0</version>

</dependency>

</dependencies>

第三步:保存Hello项目中的pom.xml,可以在本地仓库中看到classes.jar包,这是从私服上下载到本地仓库的包。

同时发现Hello项目中已经存在jdbc-10.0.jar

 

在私服上创建自己的(宿主仓库,所以我们的包上传至宿主仓库,供我们部门的开发人员使用,其他的包还需要私服的代理仓库从互联网下载)仓库,并配置用户,角色,权限

应用场景


第一步:建立自己的仓库

创建一个本地的主机仓库,在配置中配置以下信息


 

第二步:配置权限


以上是添加“zhangpeng1”的权限。

 

第三步:添加角色


以上是添加“zpeng-admin”的角色


选择权限



第四步:添加用户



选择需要添加的角色


 

第六步:部署构建到Nexus,包含ReleaseSnapshot 在父项目(Parent)根目录中pom.xml中配置:

<distributionManagement> 

<repository> 
   <id>zhangpeng1</id> 
   <name>zhangpeng1</name> 
   <url>http://192.168.1.80:8088/nexus-2.1.2/content/repositories/zhangpeng1</url> 
</repository>

</distributionManagement>

<!-- 依赖包发布到私服,将开发的包上传到宿主仓库-->



第七步:Nexus的访问权限控制,在~/m2/setting.xml中配置如下:

<!-- 设置发布时的用户名 -->

 <servers>

<server>
<id>zhangpeng1</id>
<username>zp512</username>
<password>zhangpeng</password>
</server>

 </servers>

 

第八步:将自己开发的项目HelloHelloFriendMakeFriendParentWeb发布到department6的仓库中,使用命令clean deploy

 




注意:如果发现没有部署成功Web,应该去掉Web中的pom.xml中红色部分的配置:

<build>

    <finalName>web</finalName>

    <plugins>

          <plugin>

              <groupId>org.codehaus.cargo</groupId>

              <artifactId>cargo-maven2-plugin</artifactId>

    <version>1.2.3</version>

    <configuration>

        <container>

            <containerId>tomcat7x</containerId>

            <home>D:/apache-tomcat-7.0.27</home>

        </container>

        <configuration>

            <type>existing</type>

            <home>D:/apache-tomcat-7.0.27</home>

        </configuration>

    </configuration>

    <executions>  

                  <execution>  

                      <id>cargo-run</id>  

                      <phase>install</phase>  

                      <goals>  

                          <goal>run</goal>  

                      </goals>  

                  </execution>  

              </executions>

          </plugin>

      </plugins>

  </build>

 

 

 

 

 mirrors详解

 一、

mirrors:用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件的时候所使用的远程仓库。但是有时候这个远程仓库会比较忙,所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载,这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。

看以下是一个使用mirrors的例子:

Xml代码  
  1. <mirrors>  
  2.     <mirror>  
  3.       <id>mirrorId</id>  
  4.       <mirrorOf>repositoryId</mirrorOf>  
  5.       <name>定义一个容易看懂的名称 </name>  
  6.       <url>http://my.repository.com/repo/path</url>  
  7.     </mirror>  
  8. </mirrors>  

 

l  id:是用来区别mirror的,所有的mirror不能有相同的id

l  mirrorOf:用来表示该mirror是关联的哪一个仓库,其值为其关联仓库的id。当要同时关联多个仓库时,这多个仓库之间可以用逗号隔开;当要关联所有的仓库时,可以使用“*”表示;当要关联除某一个仓库以外的其他所有仓库时,可以表示为“*,!repositoryId”;当要关联不是localhost或用file请求的仓库时,可以表示为“external:*”。

l  url:表示该镜像的url。当Maven在建立系统的时候就会使用这个url来连接到我们的远程仓库。

 

 二、

先说mirrors中mirror的作用,mirrors允许配置多个镜像mirror,mirror的作用一般是为了使用一个更快速度的镜像,主要是访问速度的考虑,或者突破屏蔽使用可以访问的镜像。


在maven中不配置mirror时使用的maven的中央库。


在maven中配置一个mirror时,mirror通常会设置成*,还有可能是一个具体的值,还有可能是逗号隔开的几个值..

例如:

1.*

2.repo3

3.repo1,repo2,*,!repo3

4.external:*

在上面4个例子中,第一个例子中*的意思就是(根据mirrorOf和repository的id)匹配所有的库(repository),这样就是说如果你需要某个jar,他会从镜像地址去下载这个jar。不管你配置了多少个库,即使这些库的地址不一样,仍然会从镜像地址访问,这里就产生了问题。

问题:为什么我配置好了库(repository),但是下载不下来(或者下载地址不对)?

这个问题已经很明白了,就是镜像(mirror)的问题。

问题:如何解决上述问题呢?

这里请继续看第二个例子和第三个例子。


第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的库,该库会使用repo3的镜像访问。这里说重点了,即使存在一个*的,这里会先查找完全相同的存储库标识符匹配的镜像,如果找到了,就用匹配的,这里就是repo3,这点可以放心。如果找不到,那就去根据其他的mirrorOf查找去,查找到一个就使用。这里需要注意的是,如果存在多个重复的mirrorOf,只会用排名靠前的第一个(按照配置顺序来)。如果一个都没有,就会用maven中央库。


第三个例子是用逗号隔开的好几个,并且有一个特殊的!repo3,一般!的意思是非,这里的意思就是,就是排除repo3的情况。综合起来第三个的含义就是完全匹配repo1,repo2和其他全部库,排除repo3库。


到这里,第二个问题已经有了答案,给这个库配置单独的镜像,而且位置尽量在前面,id和mirrorOf一致。说到这两个一致,还得说两个不能一致的情况,就是mirror的mirrorOf不能和任何mirror的id一致,因为id在setting中唯一,mirrorOf要和库的id一致,所以势必不能和mirror的id一致,如果一致显然就起不到作用了(这里属于猜测,官方要求不能一致)。


第四个例子很特殊,含义就是匹配本地库之外的全部库。如果本地库存在,就用本地库的。

 三、

mirror则相当于一个代理,它会拦截去指定的远程repository下载构件的请求,然后从自己这里找出构件回送给客户端。配置mirror的目的一般是出于网速考虑。 

不过,很多internal repository搭建工具往往也提供mirror服务,比如Nexus就可以让同一个URL,既用作internal repository,又使它成为所有repository的mirror。

高级的镜像配置: 
1.<mirrorOf>*</mirrorOf> 
匹配所有远程仓库。 这样所有pom中定义的仓库都不生效
2.<mirrorOf>external:*</mirrorOf> 
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。 
3.<mirrorOf>repo1,repo2</mirrorOf> 
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。 
4.<mirrorOf>*,!repo1</miiroOf> 
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 


mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性,id是唯一标识一个mirror就不多说了,name貌似没多大用,相当于描述,url是官方的库地址,mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。


我本以为镜像库是一个分库的概念,就是说当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载。但事实却不是这样,当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询。


后来终于知道,maven的mirror是镜像,而不是“分库”,只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。

还有,mirror也不是按settings.xml中写的那样的顺序来查询的。

所谓的第一个并不一定是最上面的那个。


当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。


 

 http://my.oschina.net/qjx1208/blog/201085

http://yingzhuo.iteye.com/blog/1009066

http://www.blogjava.net/zyl/archive/2006/12/29/90802.html

http://blog.csdn.net/jinshuaiwang/article/details/23686099

http://blog.csdn.net/isea533/article/details/21560089

 

 

表示为仓库组中的所有仓库做镜像,如果换成3rd party,就表示只为仓库组中的第三方仓库做镜像,也就是说,本地开发需要的构件都只能从仓库组中的第三方库下载,将不能从仓库组中的其他库下载构件了。








这篇关于maven-nexus私服的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015004

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen

1、创建多模块的maven springboot项目

现在的java的项目都是多模块的,这次也跟个风。 目标:实现下述结构 项目AcedBoot, 子模块:         aced-api 对外提供接口,         aced-web 给前端提供接口,         aced-service 服务层,         aced-dao 数据底层,包含数据库mapper和实体类entity,         aced-commo