您的位置:首页 > 其它

Easypack容器系列之:Nexus 3:Maven仓库管理

2017-03-17 06:07 483 查看


Nexus作为私库管理最为流行的工具之一,用于包的管理和Docker镜像管理的私库管理场景中非常常用。Easypack利用最新版本的oss版Nexus作为基础镜像用于提供类似服务。本文将同时给出具体步骤结合Maven以实现使用Nexus进行包的管理。

Why Nexus 3

这里整理了为什么使用Nexus 3的一些理由,在做选型的时候可以做一个简单参照。

项目详细
为什么使用Nexus 3http://blog.csdn.net/liumiaocn/article/details/62050525

下载镜像

[root@liumiaocn ~]# docker pull liumiaocn/nexus
Using default tag: latest
latest: Pulling from liumiaocn/nexus
Digest: sha256:b93f9a6bba2b35ada33c324cd06bd2c732fc1bed352df186af1a013e228af8d8
Status: Image is up to date for liumiaocn/nexus:latest
[root@liumiaocn ~]#


启动Nexus

[root@liumiaocn local]# mkdir -p /usr/local/nexus-data
[root@liumiaocn local]# docker run -d -p 8081:8081 --name nexus liumiaocn/nexus
844a9378ba1f101bad3de8688e2e665ea4ea8b68cb9e4b2457557e189daf922a
[root@liumiaocn local]#


logon

项目详细
URLhttp://192.168.32.123:8081/
用户名称admin
用户密码admin123


登陆之后



创建Proxy私库

仓库类型

具体仓库类型主要分为hosted/proxy/group三种。具体含义如下:

项目详细说明
hosted本地存储,像官方仓库一样提供本地私库功能
proxy提供代理其他仓库的类型
group组类型,可以组合多个仓库为一个地址提供服务

创建Maven仓库

使用Nexus官方镜像,我们会试图总结出最佳的实践方式,然后再此基础上不断地完善和进步。

项目详细说明
实践1根据项目情况,结合Maven特点将Snapshot和Release进行分离,分别创建snapshot和release的host类型仓库
实践2活用group类型,提供统一的对外URL
实践3可以使用-v将本地卷挂载进去,或者直接使用Named volume或者Data container使得数据从nexus容器中分离,方便数据的管理和备份等

创建Snapshot的仓库

在Maven的Pom文件中的version标签内定义的以-SNAPSHOT结尾的版本tag统一在如下snapshot仓库中进行管理。

创建blob store

在创建仓库之前,建议为每个仓库创建blob store。

项目详细说明
实践4为每个仓库创建一个blob store,这样其数据会在/nexus-data下分别管理起来


创建之后



选择Server administration and configuration ->左侧的Administration -> repository -> repositories



创建仓库

项目详细说明
类型maven2(hosted)


创建

以下项目以外,使用default设定。

项目详细说明
namemaven-snapshots
version policysnapshot
deployment policyallow redeploy
blob storemaven-snapshots


确认



创建release的仓库

在Maven的Pom文件中的version标签内定义的以-SNAPSHOT结尾以外的版本tag统一在如下release仓库中进行管理。创建release的仓库步骤以及所用到的信息如下:

项目详细说明
类型maven2(hosted)
namemaven-releases
deployment policyallow redeploy
blob storemaven-releases


创建proxy仓库

创建proxy仓库,default以外的值设定如下:

项目详细说明
类型maven2(proxy)
namemaven-central
location of the remote repository being proxiedhttps://repo1.maven.org/maven2
blob storemaven-central
Maximum component age1440


最后确认的时候才发现上图中的location of the remote repository being proxied选项写错了,无法下载到本地,所以建议URL方式的设定之前先手动确认一下是否正确



创建group仓库

为提供统一的URL进行管理,按照如下方式创建group仓库:

项目详细说明
类型maven2(group)
namemaven-group
blob storemaven-central
member repositoriesmaven-snapshots
member repositoriesmaven-releases
member repositoriesmaven-central


安装Maven

具体安装请参看如下文章:

项目详细
容器方式http://blog.csdn.net/liumiaocn/article/details/57064776
裸机方式http://blog.csdn.net/liumiaocn/article/details/61920553
此处为演示方便使用裸机方式,直接安装到centos上。

安装后的确认

[root@liumiaocn ~]# which mvn
/usr/local/maven/apache-maven-3.3.9/bin/mvn
[root@liumiaocn ~]# mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T11:41:47-05:00)
Maven home: /usr/local/maven/apache-maven-3.3.9
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/local/java/jdk1.8.0_121/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
[root@liumiaocn ~]#


设定maven

[root@liumiaocn .m2]# pwd
/root/.m2
[root@liumiaocn .m2]# cat cat settings.xml
cat: cat: No such file or directory
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> 
<servers>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>

<mirrors>
<mirror>
<id>central</id>
<name>central</name>
<url>http://192.168.32.123:8081/repository/maven-group/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>

</settings>
[root@liumiaocn .m2]#


设定project

项目详细说明
demo项目spring boot 的demo项目,显示hello world
生成参照http://blog.csdn.net/liumiaocn/article/details/53442364
注意事项:上面的参照的时候spring boot用的1.4.2, 现在稳定版本在1.5.2,不过使用SPRING INITIALIZR可以不用意识。或者使用自己的Maven项目,在pom中类似的设定即可。

[root@liumiaocn discoveryservice]# cp pom.xml pom.xml.bak
[root@liumiaocn discoveryservice]# vi pom.xml
[root@liumiaocn demo-repo-snapshot]# diff pom.xml pom.xml.bak
49,54d48
<   <repositories>
<     <repository>
<       <id>maven-group</id>
<       <url>http://192.168.32.123:8081/repository/maven-group</url>
<     </repository>
<   </repositories>
56,65d49
<    <distributionManagement>
<      <snapshotRepository>
<        <id>maven-snapshots</id>
<        <url>http://192.168.32.123:8081/repository/maven-snapshots/</url>
<      </snapshotRepository>
<      <repository>
<        <id>maven-releases</id>
<        <url>http://192.168.32.123:8081/repository/maven-releases/</url>
<      </repository>
<    </distributionManagement>
[root@liumiaocn demo-repo-snapshot]#


执行确认

mvn install

[root@liumiaocn demo-repo-snapshot]# mvn install
[INFO] Scanning for projects...
Downloading: http://192.168.32.123:8081/repository/maven-group/org/springframework/boot/spring-boot-starter-parent/1.5.2.RELEASE/spring-boot-starter-parent-1.5.2.RELEASE.pom Downloaded: http://192.168.32.123:8081/repository/maven-group/org/springframework/boot/spring-boot-starter-parent/1.5.2.RELEASE/spring-boot-starter-parent-1.5.2.RELEASE.pom (8 KB at 2.5 KB/sec)
Downloading: http://192.168.32.123:8081/repository/maven-group/org/springframework/boot/spring-boot-dependencies/1.5.2.RELEASE/spring-boot-dependencies-1.5.2.RELEASE.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/org/springframework/security/spring-security-bom/4.2.2.RELEASE/spring-security-bom-4.2.2.RELEASE.pom (5 KB at 5.8 KB/sec)
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building demo-repo-snapshot 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://192.168.32.123:8081/repository/maven-group/org/springframework/boot/spring-boot-maven-plugin/1.5.2.RELEASE/spring-boot-maven-plugin-1.5.2.RELEASE.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.jar (218 KB at 7.8 KB/sec)
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo-repo-snapshot ---
Downloading: http://192.168.32.123:8081/repository/maven-group/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/com/google/collections/google-collections/1.0/google-collections-1.0.jar (625 KB at 10.8 KB/sec)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /root/demo-repo-snapshot/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo-repo-snapshot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /root/demo-repo-snapshot/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo-repo-snapshot ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /root/demo-repo-snapshot/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ demo-repo-snapshot ---
Downloading: http://192.168.32.123:8081/repository/maven-group/org/apache/maven/surefire/maven-surefire-common/2.18.1/maven-surefire-common-2.18.1.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar (309 KB at 12.1 KB/sec)
[INFO] Surefire report directory: /root/demo-repo-snapshot/target/surefire-reports
Downloading: http://192.168.32.123:8081/repository/maven-group/org/apache/maven/surefire/surefire-junit4/2.18.1/surefire-junit4-2.18.1.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/org/apache/maven/surefire/surefire-junit4/2.18.1/surefire-junit4-2.18.1.jar (67 KB at 14.3 KB/sec)

-------------------------------------------------------
T E S T S
-------------------------------------------------------
07:03:51.413 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.example.DemoRepoSnapshotApplicationTests]
......
07:03:52.138 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding [Inlined Test Properties] PropertySource with highest search precedence

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.5.2.RELEASE)
......
Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ demo-repo-snapshot ---
Downloading: http://192.168.32.123:8081/repository/maven-group/org/apache/maven/reporting/maven-reporting-api/2.2.1/maven-reporting-api-2.2.1.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/org/apache/commons/commons-compress/1.9/commons-compress-1.9.jar (370 KB at 18.9 KB/sec)
[INFO] Building jar: /root/demo-repo-snapshot/target/demo-repo-snapshot-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) @ demo-repo-snapshot ---
Downloading: http://192.168.32.123:8081/repository/maven-group/org/springframework/boot/spring-boot-loader-tools/1.5.2.RELEASE/spring-boot-loader-tools-1.5.2.RELEASE.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/com/google/guava/guava/18.0/guava-18.0.jar (2204 KB at 8.0 KB/sec)
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ demo-repo-snapshot ---
Downloading: http://192.168.32.123:8081/repository/maven-group/commons-codec/commons-codec/1.6/commons-codec-1.6.pom ......
Downloaded: http://192.168.32.123:8081/repository/maven-group/commons-codec/commons-codec/1.6/commons-codec-1.6.jar (228 KB at 7.3 KB/sec)
[INFO] Installing /root/demo-repo-snapshot/target/demo-repo-snapshot-0.0.1-SNAPSHOT.jar to /root/.m2/repository/com/example/demo-repo-snapshot/0.0.1-SNAPSHOT/demo-repo-snapshot-0.0.1-SNAPSHOT.jar
[INFO] Installing /root/demo-repo-snapshot/pom.xml to /root/.m2/repository/com/example/demo-repo-snapshot/0.0.1-SNAPSHOT/demo-repo-snapshot-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19:59 min
......
[root@liumiaocn demo-repo-snapshot]#


确认maven-central

可以看到此spring boot的demo项目所需要的所有依赖都已经在proxy的maven-central中进行了管理。



确认demo

执行

使用编译生成的jar包,启动spring boot

[root@liumiaocn demo-repo-snapshot]# java -jar target/demo-repo-snapshot-0.0.1-SNAPSHOT.jar

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.5.2.RELEASE)
......


确认页面

可以看到使用编译出来的jar包,spring boot是能够正常动作的。



总结

使用Nexus 3现在也可以很方便的对Maven的依赖库进行管理了,不断地使用和摸索,总结出最佳实践,还需要不断地努力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nexus3 maven 最佳实践