Last Updated: February 25, 2016
·
17.63K
· helmedeiros

Stopping maven from trying to access its Central Repository

Picture

Is it bad or not to pick up a project that supposedly, by using a standard like maven - which defines a standard life cycle for building, testing, and deploying project artifacts, enables easy reuse of common build logic and yet managed to prove me dependencies - can not do any of that being within a network without access external?

IT JUST happened again today!! NOw LEt's see how to solve that!

First let's have sure that we can not have access to files we need using something like a simple wget with our proxy credentials...

$ wget --no-proxy <dependency address>

Picture

$ export http_proxy="http://<proxy server address>"
$ wget --proxy-user=<username> --proxy-password=<password> <dependency address>

Picture

No that we've sure about that, what do you think about go a head and propose a solution for that?

  1. Pick and install a repository manager at your choice(Artifactory, Nexus and etc.) - they acts as a proxy between your build tool (Maven, Ant, Ivy, Gradle etc.) and the outside world;
  2. Learn how to properly work at your POM.xml;
  3. Override the central repository with your internal repository;

Maven is project-centric by design, and the POM is Maven's description of a single project. Without POM, Maven is useless. It is the POM that drives execution in Maven.

In Java, all objects have the implicit parent of java.lang.Object. Likewise, in Maven all POMs have an implicit parent which is Maven's Super POM. The Super POM can be rather intimidating at first glance but it will be the key to solve once for all this problem that affect each one of us, that wan't to keep all dependencies under control - some companies security policies doesn't allow access outside their gates :/.

To override the central repository with your internal repository, you must define a repository in a settings file and/or POM that uses the identifier central. Usually, this must be defined as both a regular repository and a plugin repository to ensure all access is consistent. For example:

<repositories>
  <repository>
   <id>central</id>
   <name>Internal Mirror of Central Repository</name>
   <url>http://localhost:8081/central/</url>
  </repository>
 </repositories>
 <pluginRepositories>
  <pluginRepository>
   <id>central</id>
   <name>Internal Mirror of Central Plugins Repository</name>
   <url>http://localhost:8081/central/</url>
  </pluginRepository>
 </pluginRepositories>

After there IT WOULD... SHOULD.. BE ALL STARS!!