本文不设计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几个仓库的具体作用 (自己单独去查一下就可以)。
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>