标签Maven

Nexus Maven库

# 赋予权限,不然启动会报错,无操作权限
chmod 777 nexus-data
docker run -d -p 8081:8081 --name nexus -v /srv/nexus-data:/nexus-data --restart=always sonatype/nexus3
# 进入镜像
docker exec -it nexus bash
# 查看密码,路径在登录框会提示,然后复制即可,登陆成功后会让你修改密码
cat /nexus-data/admin-password

二、Nexus仓库
1、仓库类型
Nexus有四种仓库和四种仓库类型
a、仓库
仓库名 描述
maven-central maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
maven-releases 私库发行版jar
maven-snapshots 私库快照(调试版本)jar
maven-public 仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用
b、类型
类型 描述
group(仓库组类型) 用于方便开发人员自己设定的仓库
hosted(宿主类型) 内部项目的发布仓库(内部开发人员,发布上去存放的仓库)
proxy(代理类型) 从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径)
virtual(虚拟类型) 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)

2、拉取jar包流程
Maven可直接从宿主仓库下载构件,也可以从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件,为了方便,Maven可以从仓库组下载构件,而仓库组并没有实际的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容)

3、创建仓库
进过上面的讲解,我们对仓库已经有了了解,接下来我们进行创建仓库,分为是代理仓库(proxy)、宿主仓库(hosted)、仓库组(group),点击主页上面的小螺丝然后在选择Repositories进入仓库管理列表,然后就可以开始创建我们的仓库啦,选择仓库类型的时候一定要选择maven2

第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库;

代理中央仓库
只要在PMO文件中配置私服的地址即可,配置如下:
<repositories>
        <repository>
            <id>maven-central</id>
            <name>maven-central</name>
            <url>http://maven:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
maven配置setting文件
Snapshot包的管理
1)修改Maven的settings.xml文件,加入认证机制
<servers>
    <server>
      <id>nexus</id><!--对应项目pom文件中设置的-->
      <username>admin</username>
      <password>admin123</password>
    </server>
</servers>
修改工程的Pom文件 要配置snapshot仓库
    <distributionManagement>
        <repository>
            <!--ID可以随便写,但是要与maven的setting文件中一致-->
            <id>releases</id>
             <name>Nexus Repository</name>
            <!--指向仓库类型为hosted(宿主仓库)的储存类型为Release的仓库---->
            <url>http://你nexus仓库的IP:8081/repository/me-release/</url>
        </repository>
        <snapshotRepository>
            <id>nexus</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
        <site>
            <id>nexus</id>
            <name>Nexus Sites</name>
            <url>dav:http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </site>
    </distributionManagement>

一种是通过修改maven的配置文件settings.xml进行更改,让所有项目都使用nexus仓库。

Maven 的配置文件名称为:setting.xml。它被存放在两个地方:
1)/usr/local/maven/conf/settings.xml #安装的目录;
2)~/.m2/settings.xml #用户的家目录;
如果两者都存在,他们的内容将被合并,并且用户范围的settings.xml优先。
关于settings.xml文件常用的的配置修改如下:
1)修改本地仓库存储路径,默认值是~/.m2/repository 可在settings.xml中的localrepository修改成自己需要的目录;
2)如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,需要离线模式下,设置offline属性,设置为true,默认为false;
3)修改中央仓库服务器,修改配置文件中便签,添加或修改镜像地址;
4)设置代理地址,修改配置文件中proxy标签,定义代理服务器,实现maven的代理。

拉取jar的私服仓库地址只要写我们的仓库组就ok,因为在创建这个组的时候,里面已经包含了其它三个仓库
settings.xml文件
在maven的settings文件中找到mirrors,加上我们组仓库的mirror,url填写我们创建的组地址即可,id、name可以随便填写

 <!-- 配置Maven服务器的账号信息,上传需要用到 -->
    <server>
        <id>maven-releases</id>
        <username>developer</username>
        <password>developer</password>
    </server>
    <server>
        <id>maven-snapshots</id>
        <username>developer</username>
        <password>developer</password>
    </server>
    <server>
        <id>maven-public</id>
        <username>developer</username>
        <password>developer</password>
    </server>
 <!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 -->
<mirrors>
    <mirror>
        <id>maven-public</id>
        <name>myself nexus repository</name>
        <url>http://maven:8081/repository/maven-public/</url>
        <!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
        <mirrorOf>central</mirrorOf>
    </mirror>
     <mirror>
      <id>maven-releases</id>
      <name>myself nexus maven-releases</name>
      <url>http://maven:8081/repository/maven-releases/</url>
      <!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
      <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
      <id>maven-snapshots</id>
      <name>myself nexus maven-snapshots</name>
      <url>http://maven:8081/repository/maven-snapshots/</url>
      <!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
   <!-- 这个配置决定了我们的Maven服务器开启snapshot配置,否则不能下载SNAPSHOTS的相关资源 -->
</profiles>
 <profile>
       <id>myconf</id>
      <repositories>
         <repository>
           <id>nexus</id>
           <url>http://maven:8081/repository/maven-public/</url>
           <releases>
             <enable>true</enable>
           </releases>
           <snapshots>
             <enable>true</enable>
             <updatePolicy>always</updatePolicy>
           </snapshots>
        </repository>
       </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>nexus</id>
          <url>http://maven:8081/repository/maven-public/</url>
           <releases>
            <enable>true</enable>
          </releases>
          <snapshots>
             <enable>true</enable>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
     </profile>
  </profiles>       需在该标签以上进行添加!
  <activeProfiles>
    <activeProfile>myconf</activeProfile>    这里的值一定要和上面profile的ID对应,才可以激活
  </activeProfiles>
</settings>          将 <activeProfiles>字段写在settings字段上面
需要发布jar资源到团队内部镜像服务器的项目的pom.xml配置<distributionManagement>增加snapshot的支持,
 <distributionManagement>
        <repository>
            <id>maven-releases</id>
            <name>Nexus Release Repository</name>
            <url>http://maven:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>maven-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://maven:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

Nexus 启用上传功能
  团队有了私有的镜像服务器以后,团队内部代码的依赖也就不再需要源码依赖了,大家可以通过发布不同版本的jar到nexus镜像上来供调用者直接通过Maven下载使用,这样不同研发人员直接的依赖也就没有那么强了,大家可以基于已经发布的版本进行各自的开发。
  那么如何发布个人的jar资源到团队内部镜像上呢?
  1. 在Nexus 中创建一个developer的角色,拥有的权利为【nx-repository-view-maven2--edit】和【nx-repository-view-maven2--add】权利,如果该角色将来可能还有nuget,npm相关上传权利,则将其权利改为【nx-repository-view--edit】和【nx-repository-view--add】权利。
  2. 创建用户,用户拥有的角色为【nx-anonymous】和刚创建的【developer】角色。其中nx-anonymous角色是nexus默认自带的角色。

上传到私仓库 mvn clean deploy -U

异常处理

*UNKNOWN com.sonatype.nexus.plugins.outreach.internal.outreach.SonatypeOutreach – Could not download page bundle
org.apache.http.conn.HttpHostConnectException: Connect to sonatype-download.global.ssl.fastly.net:443 [sonatype-download.global.ssl.fastly.net/69.171.245.49] failed: 连接超时
打开【System】–》【Capabilities】,将【Outreach:Management】禁用即可。
mvn deploy

Maven

apt install maven

http://maven.apache.org/download.cgi

https://www.runoob.com/maven/maven-setup.html

Maven官网下载

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tar -xvf apache-maven-3.6.3-bin.tar.gz

mv apache-maven-3.6.3 maven3

vim /etc/profile

#maven
export M2_HOME=/opt/maven/maven3
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin

source /etc/profile

mvn -v

Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 1.8.0_222, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre

修改maven镜像

cd /usr/share/maven/conf
vim settings.xml

<mirrors>
    <mirror>
      <id>aliyun-maven</id>
      <mirrorOf>*mirror</Of>
      <name>aliyun maven mirror</name>
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
  </mirrors>

FYI
*,!jeecg,!jeecg-snapshots
如果不加!jeecg,!jeecg-snapshots,默认所有的依赖都会去阿里云仓库下载,加上后jeecg的依赖包就可以从jeecg私服下载了。