Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you stop maven from trying to access http://repo.maven.apache.org?

The development machine cannot access the internet, and take about 60s to timeout. When I try to build, I see

Downloading: http://repo.maven.apache.org/maven2/com/google/gsa-connector/2.8.0/gsa-connector-2.8.0.pom 

However, I have the following in my POM:

    <repository>       <id>bb-nexus</id>       <url>http://repo.dev.bloomberg.com/content/groups/public</url>       <releases><enabled>true</enabled></releases>       <snapshots><enabled>true</enabled></snapshots>     </repository>     <repository>       <id>nexus-3rdparty</id>       <url>http://repo.dev.bloomberg.com/content/repositories/thirdparty/</url>       <releases><enabled>true</enabled></releases>       <snapshots><enabled>true</enabled></snapshots>     </repository> 

It always tries to go to repo.maven first. I even tried to add to D:\.m2\settings.xml

<settings>   <mirrors>     <mirror>       <!--This sends everything else to /public -->       <id>nexus</id>       <mirrorOf>*</mirrorOf>       <url>http://repo.dev.bloomberg.com/content/groups/public</url>     </mirror>   </mirrors> 

based on http://maven.apache.org/guides/mini/guide-mirror-settings.html yet it continues to try repo.maven first. I'm using Apache Maven 3.0.4 (r1232337; 2012-01-17 03:44:56-0500)

I can't use -o because it still needs to access the local repo.dev.


Here is with 'effective-settings':

D:\Users\chloe\Projects\team\confluence-plugin>mvn help:effective-settings [INFO] Scanning for projects... Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml [WARNING] Could not transfer metadata org.apache.maven.plugins:maven-install-plugin/maven-metadata.xml from/to central ( http://repo.maven.apache.org/maven2): Connection to http://repo.maven.apache.org refused ... [INFO] [INFO] --- maven-help-plugin:2.1.1:effective-settings (default-cli) @ bb-confluence-plugin --- [INFO] Effective user-specific configuration settings:  <?xml version="1.0" encoding="UTF-8"?> ... <settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca tion="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">   <localRepository xmlns="http://maven.apache.org/SETTINGS/1.1.0">d:\.m2\repository</localRepository>   <pluginGroups xmlns="http://maven.apache.org/SETTINGS/1.1.0">     <pluginGroup>org.apache.maven.plugins</pluginGroup>     <pluginGroup>org.codehaus.mojo</pluginGroup>   </pluginGroups> </settings>  [INFO] ------------------------------------------------------------------------ 
like image 362
Chloe Avatar asked Oct 08 '12 21:10

Chloe


People also ask

How do I fix http repository blocked Maven?

I solved the issue by simply replacing "http" with "https" in . xml file (in my case pom. xml). This solved my error.

How do I override Maven central repository?

Because maven uses the id "central" internally for the main repository http://repo1.maven.org/maven2, defining another repository with the same id will override the default definition. Another way to avoid use of the central repository is with the use of mirrors in settings. xml.

What is the correct way of forcing Maven to use https for Maven Central?

The solution is very easy, you just need to replace the urls to maven central repository (and maybe other main repositories) to https instead of http. That's all!!! In case, you have never defined the repositories url and you are using the default values, you just need to add the new repositories with https.


2 Answers

All pom files inherit from the maven super POM http://maven.apache.org/ref/3.0.4/maven-model-builder/super-pom.html which contains this entry:

<repositories>     <repository>         <id>central</id>         <name>Central Repository</name>         <url>http://repo.maven.apache.org/maven2</url>         <layout>default</layout>         <snapshots>             <enabled>false</enabled>         </snapshots>     </repository> </repositories> 

Try setting this in your pom (with <id>central</id>):

<repositories>     <repository>         <id>central</id>         <url>http://repo.dev.bloomberg.com/content/groups/public</url>         <releases>             <enabled>false</enabled>         </releases>     </repository> </repositories>  <pluginRepositories>     <pluginRepository>         <id>central</id>         <url>http://repo.dev.bloomberg.com/content/groups/public</url>         <releases>             <enabled>false</enabled>         </releases>     </pluginRepository> </pluginRepositories> 
like image 165
Devin Jones Avatar answered Oct 02 '22 15:10

Devin Jones


Overriding the central repository

How it works:

Most organizations will need to set up one or more shared repositories, since not everyone can deploy, or simply download from the central Maven repository.To publish releases for use across different environments within their network, organization's will typically want to set up what is referred to as an internal repository.

When using this repositories for your projects, there are two choices: use it as a mirror, or have it override the central repository. You would use it as a mirror if it is intended to be a copy of the central repository exclusively, and if it's acceptable to have developers configure this in their settings. Or like in this case that you want to prevent access to the central repository for greater control, to configure the repository from the project level instead of in each user's settings, or to include your own artifacts in the same repository, you should override the central repository.

Also, Is very important to have in mind, at this point, the resolution process conducted by the maven dependencies, which have two main blocks settings for repositories:

  1. related to the decencies will be listed within us ;
  2. related to plugins that will be added within the nodes or used during the life cycle.

The Solution:

As an object oriented framework Maven has all POMs have an implicit parent the Super POM. Under its definitions lay down both dependencies and plugins first resolver repositories configurations:

<repositories>     <repository>       <id>central</id>       <name>Maven Repository Switchboard</name>       <layout>default</layout>       <url>http://repo1.maven.org/maven2</url>       <snapshots>         <enabled>false</enabled>       </snapshots>     </repository>   </repositories>    <pluginRepositories>     <pluginRepository>       <id>central</id>       <name>Maven Plugin Repository</name>       <url>http://repo1.maven.org/maven2</url>       <layout>default</layout>       <snapshots>         <enabled>false</enabled>       </snapshots>       <releases>         <updatePolicy>never</updatePolicy>       </releases>     </pluginRepository>   </pluginRepositories>  

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 (<id>central</id>). 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>Maven Repository Switchboard</name>       <layout>default</layout>       <url>http://repo.dev.bloomberg.com/content/groups/public</url>       <snapshots>         <enabled>false</enabled>       </snapshots>     </repository>   </repositories>    <pluginRepositories>     <pluginRepository>       <id>central</id>       <name>Maven Plugin Repository</name>       <url>http://repo.dev.bloomberg.com/content/groups/public</url>       <layout>default</layout>       <snapshots>         <enabled>true</enabled>       </snapshots>       <releases>         <updatePolicy>never</updatePolicy>       </releases>     </pluginRepository>   </pluginRepositories>  

Related link: Coderwall - Stopping maven from trying to access its Central Repository

like image 22
helmedeiros Avatar answered Oct 02 '22 15:10

helmedeiros