「Maven」- settings.xml

settings.xml | Located in USER_HOME/.m2 the settings files is designed to contain any configuration for Maven usage across projects.
Settings Reference | https://maven.apache.org/settings.html

Maven 的 `settings.xml` 文件通常位于两个位置之一:

  1. 全局设置:`${maven.home}/conf/settings.xml`
  2. 用户设置:`${user.home}/.m2/settings.xml`

创建 settings.xml 文件

DeepSeek / mvn 生成 settings.xml 文件

如何生成默认的 settings.xml 文件

Maven 本身不会自动生成 settings.xml 文件,但你可以手动创建它。

获取默认 settings.xml 设置

如果想要获取 Maven 提供的默认 settings.xml 文件,可以:

  1. 找到你的 Maven 安装目录
  2. 查看 `conf/settings.xml` 文件
  3. 将其复制到你的 `~/.m2/` 目录下:cp ${MAVEN_HOME}/conf/settings.xml ~/.m2/settings.xml

注意事项

  • 大多数情况下,你不需要完整的 settings.xml 文件,Maven 有内置的默认值
  • 在需要自定义仓库、代理设置、认证信息时,才需要创建此文件
  • 针对企业环境,通常会有专门的 settings.xml 文件配置,需要从团队获取

添加仓库

# 在 Maven 的 settings.xml 中添加仓库

在 Maven 的 `settings.xml` 文件中,你可以通过 `<repositories>` 和 `<pluginRepositories>` 元素来添加仓库。以下是详细方法:

## 1. 基本仓库配置

在 `<profiles>` 部分添加仓库配置:

<profiles>
	<profile>
		<id>custom-repositories</id>
		<repositories>
			<repository>
				<id>my-repo</id>
				<name>My Custom Repository</name>
				<url>https://repo.example.com/maven2/</url>
				<releases>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
					<checksumPolicy>fail</checksumPolicy>
				</releases>
				<snapshots>
					<enabled>false</enabled>
				</snapshots>
				<layout>default</layout>
			</repository>
		</repositories>

		<pluginRepositories>
			<pluginRepository>
				<id>my-plugin-repo</id>
				<name>My Plugin Repository</name>
				<url>https://repo.example.com/maven2/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>false</enabled>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>
</profiles>

<activeProfiles>
	<activeProfile>custom-repositories</activeProfile>
</activeProfiles>

## 2. 配置选项说明

id: 仓库的唯一标识符
name: 仓库的可读名称
url: 仓库的 URL 地址
releases/snapshots:
– `<enabled>`: 是否启用该类型的构件
– `<updatePolicy>`:

– `always`: 每次构建都检查更新

– `daily` (默认): 每天检查一次

– `interval:X`: 每 X 分钟检查一次

– `never`: 从不检查更新

– `<checksumPolicy>`: 校验失败时的行为

– `ignore`: 忽略

– `fail`: 失败

– `warn`: 警告

## 3. 添加多个仓库示例

<profiles>
	<profile>
		<id>multiple-repositories</id>
		<repositories>
			<!-- 阿里云仓库 -->
			<repository>
				<id>aliyun</id>
				<name>Aliyun Maven Repository</name>
				<url>https://maven.aliyun.com/repository/public</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>false</enabled>
				</snapshots>
			</repository>

			<!-- JFrog 仓库 -->
			<repository>
				<id>jfrog</id>
				<name>JFrog Repository</name>
				<url>https://jfrog.example.com/artifactory/libs-release</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
				</snapshots>
			</repository>
		</repositories>
	</profile>
</profiles>

## 4. 企业级常用配置

### 4.1 使用镜像替换中央仓库

<mirrors>
	<mirror>
		<id>nexus-mirror</id>
		<name>Internal Nexus Mirror</name>
		<url>http://nexus.example.com/repository/maven-public/</url>
		<mirrorOf>central</mirrorOf>
	</mirror>
</mirrors>

### 4.2 配置认证信息

<servers>
	<server>
		<id>my-repo</id>  <!-- 必须与 repository 的 id 匹配 -->
		<username>deploy-user</username>
		<password>{加密的密码}</password>
	</server>
</servers>

## 5. 最佳实践建议

  1. 优先使用镜像:如果公司有内部 Nexus/Artifactory,应该配置为中央仓库的镜像
  2. 限制快照仓库:生产环境通常应该禁用快照仓库
  3. 合理设置更新策略

– 开发环境可以使用`always`或`daily`

– 构建服务器上建议使用`daily`或`never`(通过 CI 工具控制更新)

  1. 仓库顺序很重要:Maven 会按配置顺序检查仓库

## 6. 验证配置

配置完成后,可以运行以下命令验证:

“`bash
mvn help:effective-settings
mvn help:effective-pom
“`

这些命令会显示 Maven 实际使用的配置,包括合并后的仓库设置。

应用

如何 在 settings.xml 中指定其他 maven 仓库,给出完整的 settings.xml 结构

DeepSeek / 如何 在 settings.xml 中指定其他 maven 仓库,给出完整的 settings.xml 结构

# 完整的 settings.xml 配置其他 Maven 仓库示例

以下是完整的 `settings.xml` 文件结构,包含如何指定其他 Maven 仓库的详细配置:

## 1. 基本结构

“`xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<settings xmlns=”http://maven.apache.org/SETTINGS/1.0.0″

<!– 本地仓库位置 –>

<localRepository>${user.home}/.m2/repository</localRepository>

<!– 插件组 –>

<pluginGroups>
<pluginGroup>org.apache.maven.plugins</pluginGroup>
</pluginGroups>

<!– 代理设置(可选) –>

<proxies>
<!– <proxy>…</proxy> –>
</proxies>

<!– 服务器认证信息 –>

<servers>
<!– 仓库认证配置 –>
</servers>

<!– 镜像设置 –>

<mirrors>
<!– 仓库镜像配置 –>
</mirrors>

<!– 配置档 –>

<profiles>
<!– 仓库配置主要在这里 –>
</profiles>

<!– 激活的配置档 –>

<activeProfiles>
<!– 激活指定的profile –>
</activeProfiles>

</settings>

“`

## 2. 完整配置示例(含多个仓库)

“`xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<settings xmlns=”http://maven.apache.org/SETTINGS/1.0.0″

<localRepository>/path/to/custom/repo</localRepository>

<servers>
<!– 私有仓库认证 –>

<server>
<id>my-private-repo</id>

<username>admin</username>

<password>{加密的密码}</password>
</server>

<server>
<id>aliyun-repo</id>

<username>readonly</username>

<password>readonly123</password>
</server>
</servers>

<mirrors>
<!– 用阿里云镜像替代中央仓库 –>

<mirror>
<id>aliyun-mirror</id>

<name>Aliyun Mirror</name>

<url>
https://maven.aliyun.com/repository/public</url>

<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

<profiles>
<profile>
<id>custom-repositories</id>

<repositories>
<!– 阿里云仓库 –>

<repository>
<id>aliyun</id>

<name>Aliyun Maven Repository</name>

<url>
https://maven.aliyun.com/repository/public</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>

<!– 私有仓库 –>

<repository>
<id>my-private-repo</id>

<name>My Private Repository</name>

<url>
http://nexus.example.com/repository/maven-releases/</url>

<releases>
<enabled>true</enabled>

<updatePolicy>always</updatePolicy>
</releases>

<snapshots>
<enabled>true</enabled>

<updatePolicy>always</updatePolicy>
</snapshots>
</repository>

<!– JCenter仓库 –>

<repository>
<id>jcenter</id>

<name>JCenter</name>

<url>
https://jcenter.bintray.com/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<pluginRepositories>
<!– 插件仓库配置 –>

<pluginRepository>
<id>aliyun-plugin</id>

<name>Aliyun Plugin Repository</name>

<url>
https://maven.aliyun.com/repository/public</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>
</properties>
</profile>
</profiles>

<activeProfiles>
<activeProfile>custom-repositories</activeProfile>
</activeProfiles>

</settings>

“`

## 3. 关键配置说明

### 3.1 仓库认证 (`<servers>`)

“`xml
<servers>

<server>
<id>repo-id</id> <!– 必须与repository的id匹配 –>

<username>your-username</username>

<password>{加密的密码}</password>

<!– 可选配置 –>

<configuration>
<httpConfiguration>
<all>
<connectionTimeout>60000</connectionTimeout>

<readTimeout>60000</readTimeout>
</all>
</httpConfiguration>
</configuration>
</server>

</servers>

“`

### 3.2 仓库镜像 (`<mirrors>`)

“`xml
<mirrors>

<mirror>
<id>mirror-id</id>

<name>Mirror Description</name>

<url>
https://mirror.url/path</url>

<mirrorOf>repo-id,central,!private-repo</mirrorOf>
</mirror>

</mirrors>

“`

`mirrorOf` 模式说明:
– `*`:匹配所有仓库
– `external:*`:匹配所有不在本地和基于文件的仓库
– `repo1,repo2`:匹配特定仓库
– `!repo1`:排除特定仓库

### 3.3 仓库配置 (`<repositories>`)

“`xml
<repository>

<id>unique-id</id>

<name>Repository Name</name>

<url>
http://repo.url/path</url>

<layout>default</layout>

<releases>
<enabled>true</enabled>

<updatePolicy>daily</updatePolicy> <!– always,daily,interval:X,never –>

<checksumPolicy>warn</checksumPolicy> <!– fail,ignore,warn –>
</releases>

<snapshots>
<enabled>false</enabled>

<updatePolicy>always</updatePolicy>

<checksumPolicy>fail</checksumPolicy>
</snapshots>

</repository>

“`

## 4. 企业级推荐配置

“`xml
<profiles>

<profile>
<id>enterprise-repos</id>

<repositories>
<!– 公司内部发布仓库 –>

<repository>
<id>corp-releases</id>

<name>Corporate Releases</name>

<url>
https://nexus.corp.com/repository/maven-releases/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>

<!– 公司内部快照仓库 –>

<repository>
<id>corp-snapshots</id>

<name>Corporate Snapshots</name>

<url>
https://nexus.corp.com/repository/maven-snapshots/</url>

<releases>
<enabled>false</enabled>
</releases>

<snapshots>
<enabled>true</enabled>

<updatePolicy>always</updatePolicy>
</snapshots>
</repository>

<!– 第三方公共仓库 –>

<repository>
<id>thirdparty</id>

<name>Third Party</name>

<url>
https://nexus.corp.com/repository/thirdparty/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>

</profiles>

<activeProfiles>

<activeProfile>enterprise-repos</activeProfile>

</activeProfiles>

“`

## 5. 验证配置

配置完成后,可以通过以下命令验证:

“`bash
# 查看有效配置
mvn help:effective-settings

# 测试从特定仓库下载
mvn dependency:get \
-Dartifact=org.apache.commons:commons-lang3:3.12.0 \
-DremoteRepositories=my-private-repo
“`

## 注意事项

  1. 仓库ID必须唯一
  2. 认证信息中的ID必须与仓库ID匹配
  3. 生产环境建议使用HTTPS协议
  4. 密码可以使用Maven加密功能加密
  5. 合理设置updatePolicy以平衡构建速度和构件新鲜度

以上配置可以根据实际需求调整,特别是仓库URL和认证信息需要替换为实际值。

添加 nexus 仓库

DeepSeek / maven 中添加 nexus 仓库

# 在 Maven 中添加 Nexus 仓库

Nexus 是一种流行的仓库管理器,可以代理远程仓库并托管私有仓库。以下是配置 Maven 使用 Nexus 仓库的详细方法:

## 1. 基本 Nexus 仓库配置

在 `settings.xml` 文件中添加以下配置:

“`xml
<settings>
<!– 配置 Nexus 作为中央仓库的镜像 –>
<mirrors>

<mirror>

<id>nexus</id>

<name>Nexus Public Mirror</name>

<url>
http://your-nexus-server:8081/repository/maven-public/</url>

<mirrorOf>central</mirrorOf>

</mirror>

</mirrors>

<!– 配置 Nexus 仓库 –>
<profiles>

<profile>

<id>nexus</id>

<repositories>
<repository>

<id>nexus</id>

<name>Nexus</name>

<url>
http://your-nexus-server:8081/repository/maven-public/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>true</enabled>
</snapshots>

</repository>
</repositories>

<pluginRepositories>
<pluginRepository>

<id>nexus</id>

<name>Nexus Plugin Repository</name>

<url>
http://your-nexus-server:8081/repository/maven-public/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>true</enabled>
</snapshots>

</pluginRepository>
</pluginRepositories>

</profile>

</profiles>

<activeProfiles>

<activeProfile>nexus</activeProfile>

</activeProfiles>

</settings>

“`

## 2. 认证配置(如果需要)

如果 Nexus 仓库需要认证,添加服务器认证信息:

“`xml
<servers>
<server>

<id>nexus</id> <!– 必须与repository/mirror的id匹配 –>

<username>your-username</username>

<password>your-password</password>

</server>

<server>

<id>nexus-snapshots</id>

<username>your-username</username>

<password>your-password</password>

</server>

</servers>

“`

## 3. 分离发布版和快照版仓库

更专业的配置方式是将发布版和快照版分开:

“`xml
<profiles>
<profile>

<id>nexus</id>

<repositories>

<repository>
<id>nexus-releases</id>

<name>Nexus Releases</name>

<url>
http://your-nexus-server:8081/repository/maven-releases/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>
</repository>

<repository>
<id>nexus-snapshots</id>

<name>Nexus Snapshots</name>

<url>
http://your-nexus-server:8081/repository/maven-snapshots/</url>

<releases>

<enabled>false</enabled>

</releases>

<snapshots>

<enabled>true</enabled>

<updatePolicy>always</updatePolicy>

</snapshots>
</repository>

</repositories>

</profile>

</profiles>

“`

## 4. 企业级完整配置示例

“`xml
<settings>
<mirrors>

<mirror>

<id>nexus-central</id>

<name>Nexus Central Mirror</name>

<url>
http://nexus.example.com:8081/repository/maven-central/</url>

<mirrorOf>central</mirrorOf>

</mirror>

</mirrors>

<servers>

<server>

<id>nexus-releases</id>

<username>deployment</username>

<password>{加密密码}</password>

</server>

<server>

<id>nexus-snapshots</id>

<username>deployment</username>

<password>{加密密码}</password>

</server>

</servers>

<profiles>

<profile>

<id>nexus</id>

<repositories>
<repository>

<id>nexus-public</id>

<name>Nexus Public</name>

<url>
http://nexus.example.com:8081/repository/maven-public/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>true</enabled>
</snapshots>

</repository>
</repositories>

<pluginRepositories>
<pluginRepository>

<id>nexus-public</id>

<name>Nexus Public</name>

<url>
http://nexus.example.com:8081/repository/maven-public/</url>

<releases>
<enabled>true</enabled>
</releases>

<snapshots>
<enabled>true</enabled>
</snapshots>

</pluginRepository>
</pluginRepositories>

</profile>

</profiles>

<activeProfiles>

<activeProfile>nexus</activeProfile>

</activeProfiles>

</settings>

“`

## 5. 使用 HTTPS 和安全配置

“`xml
<settings>
<mirrors>

<mirror>

<id>nexus-secure</id>

<name>Nexus Secure Mirror</name>

<url>
https://nexus.example.com/repository/maven-public/</url>

<mirrorOf>external:*</mirrorOf>

</mirror>

</mirrors>

<servers>

<server>

<id>nexus-secure</id>

<username>${env.NEXUS_USER}</username>

<password>${env.NEXUS_PASS}</password>

<configuration>
<httpConfiguration>

<all>
<usePreemptive>true</usePreemptive>
</all>

</httpConfiguration>
</configuration>

</server>

</servers>

</settings>

“`

## 6. 验证配置

配置完成后,可以运行以下命令测试:

“`bash
# 显示有效设置
mvn help:effective-settings

# 测试仓库连接
mvn dependency:get -Dartifact=org.apache.commons:commons-lang3:3.12.0

# 清除本地缓存后测试
mvn dependency:purge-local-repository -DreResolve=true
“`

## 注意事项

  1. 将 `your-nexus-server` 替换为实际的 Nexus 服务器地址
  2. 根据实际需求调整 releases 和 snapshots 的 enabled 状态
  3. 生产环境建议使用 HTTPS 而不是 HTTP
  4. 密码可以使用 Maven 的加密功能加密
  5. 不同 Nexus 版本可能有不同的仓库路径结构

如果需要更具体的配置,请提供您的 Nexus 仓库结构和访问要求。