The settings.xml file configures Maven's behavior at the machine or user level, as opposed to pom.xml, which configures an individual project. It typically lives in ~/.m2/settings.xml and controls things like repository credentials and mirrors that shouldn't be committed to source control.
Key Points: • Defines <servers> entries holding authentication credentials for private repositories, keeping secrets out of pom.xml. • Configures <mirrors> to redirect all repository requests through a faster or company-mandated proxy repository. • Can declare <proxies> for network environments that require an HTTP proxy to reach external repositories. • Supports <profiles> similar to pom.xml profiles, which can be activated globally across all projects on that machine. • Settings here can override or supplement project-level configuration, making it useful for machine-specific or sensitive setup that varies per developer or CI agent.
Example: A company might configure settings.xml on every CI agent with a <mirror> pointing all requests to an internal Nexus repository and a <server> entry holding the credentials needed to authenticate to it, so no pom.xml ever needs to contain secrets.
Code Example:
<settings>
<servers>
<server>
<id>internal-repo</id>
<username>${env.NEXUS_USER}</username>
<password>${env.NEXUS_PASS}</password>
</server>
</servers>
<mirrors>
<mirror>
<id>internal-mirror</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.internal/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>Interview Tip: A concise interview answer is:
"settings.xml holds machine-level Maven configuration like repository credentials, mirrors, and proxies, separate from the project-level pom.xml. I use it to keep secrets out of source control and to point all dependency resolution through an internal mirror like Nexus or Artifactory."