Where is the best place to specify required repositories for maven projects, pom.xml or settings.xml? What are the pros and cons of each location? What is best practice?
It seems to me that defining the repositories in the POM is better for a number of reasons:
- Reproducibility: The dependent artifacts are coming from a known location that is explicitly declared in the POM. There is also less opportunity for a user's misconfigured repositories to cause problems.
- Portability: This POM will build on anyone's machine with maven installed. There are no additional requirements on additional user configured repository settings.
- Ease of use: It's easier for new developers to retrieve and build the project because there is less configuration to setup.
Perhaps a con is that if the location of the repository changes in the future, proxies need to be installed or patch releases of old software need to be released specifying the new repository locations (or .m2/settings.xml can always provide additional repositories as a last resort). However, this seems like a necessary ramification of good reproducibility and portability in release management rather than a con.
Any other thoughts?