Maven仓库以及搭建私服相关说明与配置

491 阅读1分钟

1. 安装私服

> docker run -d -p 8081:8081 --name nexus3 sonatype/nexus3
> docker exec -it nexus3 /bin/bash   
> cat nexus-data/xxx.pwd  //获取第一次登录得默认密码,第一次登录时访问页面会提示路径和默认密码文件名
> firewall-cmd --zone=public --permanent --add-port=8081/tcp
### 访问地址
http://192.168.3.15:8081   账户amdin,密码是刚才的默认密码
登录后设置服务器可以使用匿名用户访问

私服有group(集合库), hosted(本地库), proxy(代理库) 3种库 group 整合了hosted,proxy,让私服暴露一个public(group库)给用户使用 proxy 库背后可配置阿里,华为,或其他的中央仓库,是一个代理 hosted 分为release, snapshot 2种,用户用户自己管理属于自己使用的jar包

2. 配置settings.xml

<?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 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <!-- 默认的值是${user.home}/.m2/repository -->
    <localRepository>/Users/scott/Develop/Repository/rmaven</localRepository>

    <!-- 如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true。 -->
    <interactiveMode>true</interactiveMode>

    <!-- 如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false。 -->
    <usePluginRegistry>false</usePluginRegistry>

    <!-- 如果构建系统要在离线模式下工作,设置为true,默认为false。 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的。 -->
    <offline>false</offline>
    
    <!--配置一个阿里镜像-->
    <mirrors>
        <mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>


    <!-- settings.xml中的profile是pom.xml中的profile的简洁形式。 它包含了激活(activation),仓库(repositories),插件仓库(pluginRepositories)和属性(properties)元素。
        profile元素仅包含这四个元素是因为他们涉及到整个的构建系统,而不是个别的POM配置。 如果settings中的profile被激活,那么它的值将重载POM或者profiles.xml中的任何相等ID的profiles。 -->
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <repositories>
                <repository>
                    <id>release_user</id>
                    <name>Nexus Public</name>
                    <url>http://192.168.3.15:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <snapshots/>
                    <id>release_user</id>
                    <name>nexus-releases</name>
                    <url>http://192.168.3.15:8081/repository/maven-public/</url>
                </pluginRepository>
                <pluginRepository>
                    <snapshots/>
                    <id>aliyun-releases</id>
                    <name>releases</name>
                    <url>https://maven.aliyun.com/repository/releases</url>
                </pluginRepository>
                <pluginRepository>
                    <snapshots/>
                    <id>spring-plugins-releases</id>
                    <name>releases</name>
                    <url>https://repo.spring.io/plugins-release</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <!-- activations是profile的关键,就像POM中的profiles,profile的能力在于它在特定情况下可以修改一些值。
        而这些情况是通过activation来指定的。 -->
    <!-- <activeProfiles/> -->
    <activeProfiles>
        <activeProfile>default</activeProfile>
    </activeProfiles>

    <!--私服的访问账户密码,注意这个id要与repository id配置一致才能使用得上-->
    <servers>
        <server>
            <id>release_user</id>
            <username>admin</username>
            <password>admin</password>
        </server>
        <server>
            <id>snapshot_user</id>
            <username>admin</username>
            <password>admin</password>
        </server>
    </servers>
</settings>

配置普通得pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>

    <dependencies>
        ...
    </dependencies>

    <distributionManagement>
        <repository>
            <id>release_user</id>
            <name>Release Deploy</name>
            <url>http://192.168.3.15:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshot_user</id>
            <name>Snapshot Deploy</name>
            <url>http://192.168.3.15:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <repositories>
        <repository>
            <id>release_user</id>
            <name>Nexus Public</name>
            <url>http://192.168.3.15:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <snapshots />
            <id>release_user</id>
            <name>nexus-releases</name>
            <url>http://192.168.3.15:8081/repository/maven-public/</url>
        </pluginRepository>
    </pluginRepositories>
</project>

仓库优先级

  • 中央仓库,这是默认的仓库
  • 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置
  • 全局profile仓库,通过 settings.xml 中的 settings.profiles.profile.repositories.repository 配置
  • 项目仓库,通过 pom.xml 中的 project.repositories.repository 配置
  • 项目profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
  • 本地仓库

依赖优先级关系由近(本地仓库)及远(中央仓库)