Maven配置问题咨询:移除默认Profile与调整依赖仓库优先级
Maven配置求助
我已创建如下settings.xml文件,该文件可正常运行,但存在两个问题:
<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 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository/> <interactiveMode/> <offline/> <pluginGroups> <pluginGroup>by.server</pluginGroup> </pluginGroups> <servers> <server> <id>nexus-proxy.server</id> <username>user</username> <password>pass</password> </server> <server> <id>nexus.server</id> <username>user</username> <password>pass</password> </server> </servers> <mirrors/> <proxies/> <profiles> <profile> <id>server</id> <repositories> <repository> <id>nexus-proxy.maven-public</id> <url>https://nexus-proxy.server.by/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>nexus.belveb-maven</id> <url>https://nexus.server.by/repository/server/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>server</activeProfile> </activeProfiles> </settings>
问题1:如何移除现有的server Profile,使仓库配置默认应用到所有项目?目前所有项目均关联该Profile。
Maven的settings.xml里,仓库配置(<repositories>)必须放在<profile>节点内,没法脱离profile单独存在。要让仓库配置默认全局生效,你不需要删除这个profile,只需要确保它是全局默认激活的就行——你当前的配置已经通过<activeProfiles>激活了server profile,这本来就会让所有项目自动应用该仓库配置,除非项目的pom.xml里有自己的仓库配置覆盖它。
如果你的项目pom里还手动指定了这个server profile,直接删掉项目里相关的profile配置就行,这样就完全由settings.xml的全局激活profile来生效。要是你看着server这个id不顺眼,改成default之类的通用id也可以,本质上不影响全局生效的逻辑。
问题2:当前下载依赖时所有请求均走nexus-proxy.maven-public,如何调整为优先从Maven Central下载,找不到再检索私有仓库?
你现在的配置里没加Maven Central仓库,而且Maven是按照<repositories>里的顺序依次查找依赖的,所以要调整顺序并添加Central仓库:
- 在
serverprofile的<repositories>里,把Maven Central放在最前面; - 保留原来的两个私有仓库在后面。
修改后的settings.xml关键部分如下,完整配置可参考:
<profiles> <profile> <id>server</id> <repositories> <!-- 优先查找Maven Central --> <repository> <id>central</id> <url>https://repo1.maven.org/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> <!-- Central一般不存快照包,按需开启 --> </snapshots> </repository> <!-- 原私有仓库放在后面 --> <repository> <id>nexus-proxy.maven-public</id> <url>https://nexus-proxy.server.by/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>nexus.belveb-maven</id> <url>https://nexus.server.by/repository/server/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles>
这样Maven会先去Central找依赖,找不到再依次查后面的私有仓库。
内容的提问来源于stack exchange,提问作者Aliaksei
相关产品推荐
相关产品推荐

