mgv
mgv

Reputation: 8484

Don't download artifact from remote repository

I'd like to specify some artifacts that SHOULD NOT be downloaded from a remote repository, even if they are present there. Is there any way to achieve this in maven2?

Upvotes: 4

Views: 9064

Answers (4)

sal
sal

Reputation: 23623

One option would be to install a local copy of the file with the install-file mojo and give your copy a distinct name. Pre-pending "local." to the groupid name would make it easy to id in the pom files. If would also make it easy to switch out.

add it to your local repos like this:

mvn install:install-file -Durl=file://xmlthing.jar -Dinternal -Dfile=xmthing.jar -DgroupId=local.org.xmltool -DartifactId=xmlthing -Dversion=1.6.1 -Dpackaging=jar

You would then replace

 <dependency>
     <groupId>org.xmltool</groupId>
     <artifactId>xmlthing</artifactId>
     <version>1.6.1</version>
 </dependency>

with

<dependency>
    <groupId>local.org.xmltool</groupId>
    <artifactId>xmlthing</artifactId>
    <version>1.6.1</version>
</dependency>

Upvotes: 0

Ken Liu
Ken Liu

Reputation: 22914

Not sure if this is what you need, but you can declare a dependency with system scope, which tells Maven that a particular JAR is assumed to be in the classpath (e.g. one that is included in the java installation directory).

From the docs:

This scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.

AFAIK, Maven treats the local repository basically as a cache of a remote repository, so there isn't any way to tell it not to get a particular dependency from a remote repo.

Upvotes: 5

Rich Seller
Rich Seller

Reputation: 84028

I'm not clear exactly what you're after, so here's answers to a few different interpretations:

If the artifacts are transitive dependencies, you can specify that the dependencies be excluded. See the Transitive Dependency Exclusion section of the Dependency Mechanism documentation.

If you want to make sure no artifacts are downloaded, you can set Maven to offline mode by passing -o as a command line switch, or adding <offline>true</offline> to your settings.xml

With the Nexus Maven repository manager, you can set up a proxy repository to the remote repository, and configure the proxy to block certain artifacts. You would do this by adding a "repository target" matching the artifact's groupId and artifactId, then create read permissions for the that target that the Nexus user doesn't have. Any user connecting to the proxy would then not be able to obtain that artifact. See the Nexus book for details, of configuring targets.

If none of these meet your needs can you elaborate on your question please.

Upvotes: 2

Valentin Jacquemin
Valentin Jacquemin

Reputation: 2245

Have you tried the offline mode?

mvn -o

Upvotes: 10

Related Questions