本文不设计pom.xml的项目配置引用 主要是记录一下公共jar的管理配置

1.当只是通过maven单独去做项目(jar)管理 不需要自己搭建Nexus本地仓库

只需要修改一下maven setting配置

<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">

		  <localRepository>e:\maven</localRepository>
  
<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

不需要配置中央仓库 因为在 maven 解压路径lib中 E:\xxxx\lib\maven-model-builder-3.3.9.jar解压打卡pom.xml 中已经默认配置好中央仓库

<modelVersion>4.0.0</modelVersion>

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

2.需要配置本地仓库Nexus(一般公司都会配置)

当存在Nexus 我们自己的项目就要考虑首先访问自己公司的Nexus (本地毕竟比远程仓库下载快),在项目中就要配置本地Nexus地址

一种可以在单个项目pom.xml中配置如下添加即可

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<!-- 添加nexus repository -->
	<repositories>
		<repository>
			<id>nexus</id>
			<name>Nexus Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
		</repository>
	</repositories>
	<dependencies>

第二种 在maven setting.xml配置文件中配置

<profiles>
		 <profile>
		  <id>nexus</id>
		  
		  <repositories>
			<repository>
			  <id>Releases</id>
			  <name>my-nexus-repository</name>
			  <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			  <releases>
				<enabled>true</enabled>
			  </releases>
			  <snapshots>
				<enabled>true</enabled>
			  </snapshots>
			</repository>
		  </repositories>
		 <profile>
      </profiles>
<!-- 记得启动-->
 <activeProfiles>
  <activeProfile>nexus</activeProfile>
</activeProfiles>

每一个profile 可以配置一个仓库地址(多个仓库 作用自己查)

当本地Nexus中没有相应的jar存在会直接去远程仓库寻找,那么当本地Nexus没有下载过相应jar时 ,还是要去远程仓库寻找 。

那么问题是在哪去寻找 (注意:**不是再去maven lib下 E:\xxxx\lib\maven-model-builder-3.3.9.jar 查 而

是在Nexus自己那几个仓库中配置的远程仓库去找** ) 在Nexus中有一个默认的central仓库如图:

nexus本地仓库迁移到远程仓库 nexus仓库配置_nexus本地仓库迁移到远程仓库

本文不再介绍Nexus几个仓库的具体作用 (自己单独去查一下就可以)。

3 设置只能通过Nexus去访问中央仓库

但是当我们的Nexus关闭了呢 自己的项目还是会去 通过maven lib下 E:\xxxx\lib\maven-model-builder- 3.3.9.jar 去查中央仓库所以要设置 只能通过我们的Nexus去访问中央仓库 ,当我的仓库关了 就不能去访问中央仓库获取jar包。(这样也是为了更灵活统一 毕竟jar包中的中央仓库 是不可变得 Nexus访问中央仓库的地址是可以配置的

解决上面的问题需要配置镜像(mirror)代码如下

<mirrors>
    
 <mirror>
      <id>Releases</id>
	  <!--*代表所有需要访问的 仓库都会镜像到本地12.0.0.1 8081仓库去寻找 也就是远程中央仓库 你只能通过我的本地仓库去访问 -->
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
    </mirror>
    <mirror>
      <id>Snapshots</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://127.0.0.1:8081/nexus/content/repositories/central/</url>
    </mirror>
  </mirrors>

同样可以配置多个mirror ,mirrorOf代表哪些要访问的仓库地址(profiles 下的profile)需要镜像必须走自己的 Nexus地址。 设置成星号代表所有。

这种情况下在我们本地的maven 配置的profile和maven lib下 E:\xxxx\lib\maven-model-builder-3.3.9.jar

pom.xml中的profile 地址都会转到mirror

同时注意一下 在maven的 那个jar包中的配置 snapshots和enabled都是关闭的false

<repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

虽然访问所有的仓库都是转到mirror 但是他必须先去找到 下面的profile 地址和maven jar中的中央工厂地址才回去转到 mirror 中,注意:镜像过去的只是地址 配置中的其他配置还是按照原来的模式去设置

所以在我们要访问中央仓库时他根据上面设置的false去设置 我们应该重写jar包中的中央工厂的配置。

将releases和snapshots设置为true

<profiles>
<profile>
      <id>central</id>
      
      <repositories>
        <repository>
          <id>Releases</id>
          <name>my-nexus-repository</name>
          <url>http://mvnrepository.com/</url>
	  <!-- 下面两个true 表示可以下载 releases和 snapshots包(具体也不清楚是什么)-->
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>

    </profile>
  </profiles>
开启是必须的
<activeProfiles>
  <activeProfile>central</activeProfile>
</activeProfiles>

总结:最后说的好像有点乱,核心配置看setting.xml吧 一共三四段

第一段 自己本地jar存储:
<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">
		  <localRepository>e:\maven</localRepository>


第二段Nexus用户:

 <servers>
		
			<server>
			  <id>siteServer</id>
			  <privateKey>/path/to/private/key</privateKey>
			  <passphrase>optional; leave empty if not used.</passphrase>
			</server>
			-->
			 <server>
			  <id>Releases</id>
			  <username>admin</username>
			  <password>admin123</password>
			</server>
		  <server>
			  <id>Snapshots</id>
			  <username>admin</username>
			  <password>admin123</password>
			</server>
		  </servers>


第三段mirror镜像配置:

 <mirror>
			  <id>Releases</id>
			  <!--*代表所有需要访问的 仓库都会镜像到本地12.0.0.1 8081仓库去寻找 也就是远程中央仓库 你只能通过我的本地仓库去访问 -->
			  <mirrorOf>*</mirrorOf>
			  <name>Human Readable Name for this Mirror.</name>
			  <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			</mirror>
		  
			<mirror>
			  <id>Snapshots</id>
			  <mirrorOf>*</mirrorOf>
			  <name>Human Readable Name for this Mirror.</name>
			  <url>http://127.0.0.1:8081/nexus/content/repositories/central/</url>
			</mirror>
		  </mirrors>

第四段 需要访问的仓库:

<profiles>
 <profile>
			  <id>**nexus**</id>
			  
			  <repositories>
				<repository>
				  <id>Releases</id>
				  <name>my-nexus-repository</name>
				  <url>http://mvnrepository.com/</url>
				  <!-- 下面两个true 表示可以下载 releases和 snapshots包(具体也不清楚是什么)-->
				  <releases>
					<enabled>true</enabled>
				  </releases>
				  <snapshots>
					<enabled>true</enabled>
				  </snapshots>
				</repository>
			  </repositories>
			
			  <pluginRepositories>
				<pluginRepository>
				  <id>Snapshots</id>
				  <name>my-nexus-repository</name>
				  <url>http://mvnrepository.com/</url>
				  <releases>
					<enabled>true</enabled>
				  </releases>
				  <snapshots>
					<enabled>true</enabled>
				  </snapshots>
				</pluginRepository>
			  </pluginRepositories>
			</profile>
		  </profiles>

 <activeProfiles>
		  <activeProfile>**nexus**</activeProfile>
		</activeProfiles>