Why is my Maven so slow on Ubuntu? - maven-2

I have Maven on Ubuntu server.
It seems to try lots and lots of places to download from but the download times out, but the timeout takes ages, so my whole build takes more than a hour.
Downloading: http://scala-tools.org/repo-releases/org/apache/maven/maven-repository-metadata/2.0.3/maven-repository-metadata-2.0.3.pom
[INFO] Unable to find resource 'org.apache.maven:maven-repository-metadata:pom:2.0.3' in repository scala-tools.org (http://scala-tools.org/repo-releases)
Downloading: http://download.java.net/maven/2/org/apache/maven/maven-repository-metadata/2.0.3/maven-repository-metadata-2.0.3.pom
[WARNING] Unable to get resource 'org.apache.maven:maven-repository-metadata:pom:2.0.3' from repository java.net (http://download.java.net/maven/2): Error transferring file: Connection timed out
Downloading: http://download.java.net/maven/1/org.apache.maven/poms/maven-repository-metadata-2.0.3.pom
[WARNING] Unable to get resource 'org.apache.maven:maven-repository-metadata:pom:2.0.3' from repository m1.java.net (http://download.java.net/maven/1): Error transferring file: Connection timed out
Downloading: http://download.java.net/maven/2/org/apache/maven/maven-repository-metadata/2.0.3/maven-repository-metadata-2.0.3.pom
[INFO] Unable to find resource 'org.apache.maven:maven-repository-metadata:pom:2.0.3' in repository maven2-repository.dev.java.net (http://download.java.net/maven/2)
Downloading: http://repository.jboss.org/maven2/org/apache/maven/maven-repository-metadata/2.0.3/maven-repository-metadata-2.0.3.pom
[INFO] Unable to find resource 'org.apache.maven:maven-repository-metadata:pom:2.0.3' in repository repository.jboss.org (http://repository.jboss.org/maven2)
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.3/maven-repository-metadata-2.0.3.pom
I only have two repos set in my maven build
<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>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>repository.jboss.org</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
Thanks, philip

It seems that Ubuntu's packaged Maven version comes with a /etc/maven2/settings.xml. Have a look at this file to see if it contains additional repositories. Also check the file ~/.m2/settings.xml of the user you are using.
PS: I don't really like using .deb for this kind of software and recommend installing it "manually" (i.e. just download the archive, unzip it somewhere, set the M2_HOME env variable and add $M2_HOME/bin to the $PATH).

Maybe overkill if you're the only one working on the project but I'd recommend installing a Maven repository manager like Artifactory (http://www.jfrog.org/products.php) or Nexus. I'm not familiar with Nexus but Artifactory installation is dead simple - just unzip and you're good to go (since it comes with an embedded jetty).
Why will this make your Maven builds faster ?
Repository managers employ more sophisticated caching than the Maven core itself
(at least with Artifactory) You can restrict which Maven repositories are queried for which group IDs. This speeds up things considerably if you need to fetch dependencies from multiple different Maven repositories

Make sure you can access these resources (in your case the POMs) outside of Maven, if the machine has no network connectivity for example (or can't resolve hostnames), it will time out, and it will take a long time (as you noted).
If you don't need to re-download the resources every time, just run Maven in the "offline" mode with the -o switch.
Also, just a tip, you may want to create and install POMs, even for third party JARs, and then get them in your local repo. That way Maven will not have to go out to the tubes to get resources each time (it will check em, but they will be resolved locally).
For third party or otherwise non Maven JARs you can install then with the install plugin.

Related

How to specify an internal company Maven repo for a Jenkins job to use?

I'm trying to setup a Maven2 job in Jenkins. I've got such lines in my pom.xml:
<distributionManagement>
<repository>
<id>releases</id>
<name>Releases</name>
<url>http://nexus.example.com:8081/nexus/content/repositories/releases</url>
</repository>
...
</distributionManagement>
I get this error when trying to build the job:
...
Downloading: http://repo1.maven.org/maven2/.../.../.../....jar
[INFO] Unable to find resource 'resource id goes here' in repository central (http://repo1.maven.org/maven2)
...
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
...Here goes the list of missing dependencies.
I know for sure that the required artifacts do exist in nexus.example.com repository, because I can do an mvn compile on my workstation and they will be downloaded OK.
But Jenkins for some reason does not even try to download the artifacts from local repo, ignoring the specification in the pom.xml.
Any ideas what can I try?
You can resolve this error in two ways.
One, move the <repositories> section out of <distributionManagement>. <distributionManagement> section is to indicate where you want to deploy your artifacts.
Specify the <repositories> section in the settings.xml of the username jenkins is running under. This is recommended, since this will apply for all the projects that you would be building.

Why i always gets the [INFO] Unable to find resource in repository?

greetings all
I am using maven 2 in my spring project
and when I try to build the project from the terminal using the commands (mvn clean-mvn install)
it cannot download any dependency from any of the repos, and I always gets Info like :
Downloading: http://repo1.maven.org/maven2/velocity-tools/velocity-tools-generic/1.4/velocity-tools-generic-1.4.pom
[INFO] Unable to find resource 'velocity-tools:velocity-tools-generic:pom:1.4' in repository first (http://repo1.maven.org/maven2)
Downloading: http://mirrors.ibiblio.org/pub/mirrors/maven2//velocity-tools/velocity-tools-generic/1.4/velocity-tools-generic-1.4.pom
[INFO] Unable to find resource 'velocity-tools:velocity-tools-generic:pom:1.4' in repository second (http://mirrors.ibiblio.org/pub/mirrors/maven2/)
Downloading: http://repository.jboss.com/maven2//velocity-tools/velocity-tools-generic/1.4/velocity-tools-generic-1.4.pom
[INFO] Unable to find resource 'velocity-tools:velocity-tools-generic:pom:1.4' in repository jboss (http://repository.jboss.com/maven2/)
Downloading: http://maven.jahia.org/maven2/velocity-tools/velocity-tools-generic/1.4/velocity-tools-generic-1.4.pom
[INFO] Unable to find resource 'velocity-tools:velocity-tools-generic:pom:1.4' in repository additional (http://maven.jahia.org/maven2)
Downloading: http://208.79.234.53:8081/artifactory/libs-releases-local/velocity-tools/velocity-tools-generic/1.4/velocity-tools-generic-1.4.pom
[WARNING] Unable to get resource 'velocity-tools:velocity-tools-generic:pom:1.4' from repository host.varaza.com (http://208.79.234.53:8081/artifactory/libs-releases-local): Error transferring file: Connection timed out
any ideas, why such thing occurs ?
From the repository link, it looks like this dependency does not have an associated pom file. This is the reason for the warning.
Typically, dependencies in the repository also have a pom file, which describes the project, as well as specifies its dependencies. Maven first downloads this pom file, so that it can resolve transitive dependencies, if any.
Maven is just trying to get the pom files from your repositories and will try for as long as it can't download them.
This is happening most probably because the libraries (dependencies) you reference don't have a pom file in any of the remote repositories available. This is probably normal.
However if you want to get rid of the message you could deploy minimal pom files for those dependencies in your company's repository. You can choose to just install them locally but then other developers in your team would still have those messages.
Maven can't reach the sites where dependencies are located.
Try running
ping repo1.maven.org
or opening it in your web browser. Maybe you should set the firewall to allow Maven downloading stuff from internet.
I used the following dependency - works for me.
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>1.4</version>
</dependency>

maven settings.xml

I am trying to convert maven1 project.xml to maven 2 pom.xml.
maven one:convert plugin converts project.xml to pom.xml.
Tried the steps
Installed maven 2
cd project-dir (which has my project.xml)
mvn -e one:convert
I had maven-one-plugin-1.2.jar in $MAVEN_HOME/lib
Settings.xml had the following local repository settings
<localRepository>path_to_mavenhome/lib</localRepository>
<offline>true</offline>
<pluginGroups>
<pluginGroup>org.apache.maven.plugins:maven-one-plugin</pluginGroup>
</pluginGroups>
<profile>
<id>central</id>
<repositories>
<repository>
<id>local</id>
<url>file://pathtomavenhome\lib</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
Got this error message
[INFO] Searching repository for plugin with prefix: 'one'.
[INFO] org.apache.maven.plugins:maven-one-plugin: checking for updates from central
[WARNING] repository metadata for: 'org.apache.maven.plugins:maven-one-plugin' could not be retrieved from repository: central due to an error: Error transferring file: Connection timed out: connect
[INFO] Repository 'central' will be blackliste
d
It does not connect to local repository.
No Settings.xml file in $M2_HOME/.m2 dir
I don't see the need for you to have a settings.xml here. Remove it from your home directory and try:
mvn one:convert
This should be more than sufficient.
If you're offline, there is no way for this to work, unless you already have the Maven one plugin in your local repository. Your settings.xml is not quite right and over-complicates your task at the moment.
Your steps are correct.
The error indicates that you have problem with your internet. Please verify the network availability.
[WARNING] repository metadata for: 'org.apache.maven.plugins:maven-one-plugin' could not be retrieved from repository: central due to an error: Error transferring file: Connection timed out: connect
Follow this links to for your reference
1. http://maven.apache.org/guides/mini/guide-m1-m2.html
2. http://maven.apache.org/plugins/maven-one-plugin/
Try mvn maven-one-plugin:convert
Just create new Settings.xml, check this example here Sample settings.xml for maven its usually located somewhere in your user dir, hidden folder called .m2

jetty-blazeds and maven (com.adobe.flex#flex-messaging-core missing)

I want to setup jetty with jetty-blazeds extension. Everything looks fine but when I run maven to get the dependencies, I get:
UNRESOLVED DEPENDENCIES
com.adobe.flex#flex-messaging-core;3.2.0: not found
com.adobe.flex#flex-messaging-common;3.2.0: not found
I've tried many repositories but no success. I am wondering has anyone managed to successfully locate these dependencies through maven ? If yes, could you please share the repository !
Thank you,
-A
If you look at the pom of jetty-blazeds, for example jetty-blazeds-7.0.0.1beta3.pom, you'll see this:
<repositories>
<repository>
<id>project-repo</id>
<name>project repo</name>
<url>file:${basedir}/maven_repo</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
Jetty is using a file based repository. And if you look at this file based repository in their svn repository, you will see that it contains the mentioned artifacts (which are thus very likely not available in any known public repository).
So my suggestion would be to use the same strategy i.e. to install the artifacts locally, either in your local repository or in a file based repository in your VCS (you could also declare https://svn.codehaus.org/jetty/jetty/branches/jetty-7/jetty-blazeds/maven_repo/ as repository but this is extremely ugly).
If you have a corporate repository, the alternative is obvious: deploy the adobe artifacts in it.
It is recommended to set up a central Maven repository for your project/department and configure it in the project pom. Then you can download such dependencies by hand and deploy them manually to the project repo. Although this is a bit more extra work, it eliminates the whole class of problems in the long run.

How to force maven to download poms for offline use

my problem with maven is that if the maven repository is not responding, one cannot build. It seems to fetch every "mvn package" time some poms, which won't change, because they are of the same version.
How can I say to maven that please don't look them up from server, and instead download them permanetly to offline repository?
Thanks!
You can run maven with the -o flag:
-o,--offline Work offline
This will cause Maven to never look for dependencies in remote repositories. On the other hand, your build will fail if the dependencies are not found in the local repository.
You can configure the repository to only check for updates occasionally, or never by setting the updatePolicy element on the repository declaration. From the settings documentation:
The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).
Adding the following to your POM or the settings will configure the central repository to only download if the artifact doesn't exist locally:
<repositories>
<repository>
<id>central</id>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</repository>
</repositories>
If the repository in question is an internal remote repository, you need to ensure the maven-metadata.xml is configured correctly in the remote repository or Maven will attempt to download it each time. The simplest way to do this is to use a repository manager that will manage the metadata automatically