How to specify a repository for a dependency in Maven

Maven 2Dependencies

Maven 2 Problem Overview


In projects with several dependencies and repositories, the try-and-error approach of Maven for downloading dependencies is a bit cumbersome and slow, so I was wondering if there is any way to set an specific repo for some declared dependencies.

For example, I want for bouncycastle to check directly BouncyCastle's Maven repo at http://repo2.maven.org/maven2/org/bouncycastle/ instead of official Maven.

Maven 2 Solutions


Solution 1 - Maven 2

Not possible. Maven checks the repositories in their declaration order until a given artifact gets resolved (or not).

Some repository manager can do something approaching this though. For example, Nexus has a routes feature that does something equivalent.

Solution 2 - Maven 2

I have moved libraries from 3rd party repositories to their own project and included this project as first module in my base project:

base/pom.xml

...
<modules>
	<module>thirdparty</module>
	<module>mymodule</module>
    ...
</modules>

base/thirdparty/pom.xml:

...
<artifactId>thirdparty</artifactId>
<packaging>pom</packaging>

<repositories>
	<repository>
		<id>First thirdparty repository</id>
		<url>https://...</url>
	</repository>
    ...
</repositories> 

<dependencies>
    <dependency>
       <!-- Dependency from the third party repository -->
    </dependency>
    ....
</dependencies>

base/mymodule/pom.xml:

<dependencies>
	<dependency>
		<groupId>${project.groupId}</groupId>
		<artifactId>thirdparty</artifactId>
		<version>${project.version}</version>
		<type>pom</type>
	</dependency>
    ...
</dependencies>

This will ensure that the libraries from the thirdparty repository are downloaded into the local repository as soon as the root project is build. For all other dependencies the repositories are not visible and therefore not included when downloading.

Solution 3 - Maven 2

This post could be very old but might be useful to someone. I specified the two repositories in pom.xml like below and it worked.

<repositories>
		<repository>
			<id>AsposeJavaAPI</id>
			<name>Aspose Java API</name>
			<url>http://repository.aspose.com/repo/</url>
		</repository>
		<repository>
			<id>Default</id>
			<name>All apart from Aspose</name>
			<url>https://repo.maven.apache.org/maven2/</url>
		</repository>
	</repositories>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDario Casta&#241;&#233;View Question on Stackoverflow
Solution 1 - Maven 2Pascal ThiventView Answer on Stackoverflow
Solution 2 - Maven 2Tobias LiefkeView Answer on Stackoverflow
Solution 3 - Maven 2Hari RaoView Answer on Stackoverflow