I imported my already working project on another computer and it started to download dependencies.
Apparently my internet connection crashed and now I get the following:
>Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
The following artifacts could not be resolved:
org.springframework:spring-context:jar:3.0.5.RELEASE,
org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
org.hibernate:hibernate-core:jar:3.6.0.Final,
org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
org.aspectj:aspectjweaver:jar:1.6.8,
commons-lang:commons-lang:jar:2.5,
>mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.
>Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000
How do I force maven to update?
mvn clean install -U
-U means force update of snapshot dependencies.
Release dependencies will be updated this way if they have never been previously successfully downloaded. ref: https://stackoverflow.com/a/29020990/32453
If your local repository is somehow mucked up for release jars as opposed to snapshots (-U and --update-snapshots only update snapshots), you can purge the local repo using the following:
mvn dependency:purge-local-repository
You probably then want to clean and install again:
mvn dependency:purge-local-repository clean install
Lots more info available at https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html
-U seems to force update of all SNAPSHOT dependencies.
If you want to update a single dependency without clean or -U you could just remove it from your local repo and then build.
The example below if for updating slf4j-api 1.7.1-SNAPSHOT:
rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
All the answers here didn't work for me. I used the hammer method:
find ~/.m2/ -name "*.lastUpdated" | xargs rm
That fixed the problem :-)
You can do effectively from Eclipse IDE. Of course if you are using it.
Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Just in case someone wants only update project's snapshot dependencies and doesn't want to install artifact:
mvn dependency:resolve -U
Don't forget to reimport dependencies in your IDE. In IDEA you need to right click on pom file and choose Maven -> Reimport
If you're unsure what is inside your local repository, I recommend to fire a build with the option:
-Dmaven.repo.local=localrepo
That way you'll ensure to build in a cleanroom environment.
In my case first I did was:
mvn clean install -U
Still it was showing same error then I closed project and again reopened it. Finally worked.
If you are using eclipse IDE then :
Select Project.
Press alt+F5, window for Update Maven Project will pop up.
Check - Force Update of Snapshots/releases and click OK.
If Using Intellij IDE
go to settings/Maven
check Always update snapshots
I used the IntelliJ IDE and I had a similar problem and to solve I clicked in "Generate Sources and Update Folders for All Projects" in Maven tab.
Previous versions of maven did not force the check for missing releases when used -U with mvn clean install, only the snapshots, though newer version supports this.
For someone still struggling with previous version, following can be helpful-
On Windows:
cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i
On Linux:
find ~/.m2 -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;
Whenever maven can't download dependencies for any reason (connectivity/not exists etc), it will add the ".error=Could not transfer artifact" in dependency-name.lastUpdate file in respective folder under $home/.m2 directory. Removing these files will force maven to try fetching the dependencies again.
mvn clean install -e -U -Dmaven.test.skip=true
-e Detailed exception
-U forced update
-DskipTests does not execute test cases, but compiles test case classes to generate corresponding class files under target/test classes.
-Dmaven.test.skip=true, do not execute test cases or compile test case classes.Using maven. test. skip not only skips running unit tests, but also skips compiling test code.
A small suggestion. If you use the IntelliJ Idea compiler, it is recommended to clean the cache
I've got the error in an other context.
So my solution might be useful to others who stumple upon the question:
The problem:
I've copied the local repository to another computer, which has no connection to a special repository.
So maven tried to check the artifacts against the invalid repository.
My solution:
Remove the _maven.repositories files.
You need to check your settings.xml file under <maven_home>/conf directory.
This is one of the most annoying things about Maven. For me the following happens: If I add a dependency requesting more dependencies and more and more but have a slow connection, it seams to stop while downloading and timing out. While timing out all dependencies not yet fetched are marked with place holders in the .m2 cache and Maven will not (never) pick it up unless I remove the place holder entry from the cache (as other stated) by removing it.
So as far as I see it, Maven or more precise the Eclipse Maven plugin has a bug regarding this. Someone should report this.
It's important to add that the main difference of running mvn with -U and without -U is that -U will override your local SNAPSHOT jars with remote SNAPSHOT jars.
Local SNAPSHOT jars created from local mvn install in cases where you have other modules of your proj that generate jars.
For fixing this issue from Eclipse:
1) Add below dependency in Maven pom.xml and save the pom.xml file.
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
2) Go to project >> Maven >> Update Project
select the project and click OK.
3) Optional step, if it's not resolved till step 2 then do below step after doing step-1
Go to project >> Maven >> Update Project >> check in the checkbox 'Force Update of Snapshots/Releases'
select the project and click OK.
-U is used to force update maven Repo.
Use
mvn -U clean install
I've got the same error with android-maps-utils dependency. Using aar type package in dependency section solve my problem.
By default type is jar so It might be checked what type of dependency in repository is downloaded.
I tried all the answers here but nothing seemed to work. Restarted my computer first then ran mvn clean install -U. That solved my problem.
What maven does is, it downloads all your project's dependencies into your local repo (.m2 folder). Because of the internet causing issues with your local repo, you project is facing problems. I am not sure if this will surely help you or not but you can try deleting all the files within the repository folder inside the .m2 folder. Since there would be nothing in the local repo, maven would be forced to download the dependencies again, thus forcing an update.
Generally, the .m2 folder is located at c:users:[username]:.m2
after using mvn clean install -U run as maven test also and after that update your project using maven-update project
this works in my case
I had this problem for a different reason. I went to the maven repository https://mvnrepository.com looking for the latest version of spring core, which at the time was 5.0.0.M3/ The repository showed me this entry for my pom.xml:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.0.M3</version>
</dependency>
Naive fool that I am, I assumed that the comment was telling me that the jar is located in the default repository.
However, after a lot of head-banging, I saw a note just below the xml saying "Note: this artifact it located at Alfresco Public repository (https://artifacts.alfresco.com/nexus/content/repositories/public/)"
So the comment in the XML is completely misleading. The jar is located in another archive, which was why Maven couldn't find it!
We can force to get latest update of release and snapshot repository with below command :
mvn --update-snapshots clean install
I had the same error and running mvn install -U and then running mvn install worked for me.
mvn clean install -U doesn't work. However mvn -U clean followed by mvn clean install does.
I am trying to use maven to build a JNI project and I am running into some difficulty creating a GA release. The project's native code needs to be compiled on at least 3 systems (Linux, OSX, Windows) due to the native code requirements. I would also like GitHub Actions to produce a release build when I create a tag on GitHub. Because of this, I am facing a number of issues with the maven release plugin. It seems like maven's release process involves compiling and testing the code as well as screwing around with SCM before I can create a GA version and release. This simply isn't possible for this JNI project. I have already gone down the cross compiler route with Ant and I would really like to move away from that for any number of reasons, mostly Apple related. I also thought about releasing each JNI target individually, but I would really like to bundle the native code inside of the JAR and things start getting complicated when I need to share a .m2 folder across different build environments. Is it possible to release a maven project without all the compiling, testing and SCM nonsense? Maybe a different 3rd party plugin? Is there a better way I should be doing this? For reference, the pom can be found here.
Dont use the release plugin, I had a lot more success with the maven version plugin.
All the maven release plugin is doing is taking the version off the snapshot, creating a new commit and then upping the version to a new incremented SNAPSHOT. You can mimic this process without maven needing to know anything about your SCM using versions.
One way to do it is to not SNAPSHOTS and instead build with the git short hash as part of the version:
So while developing, the version looks pretty normal
<groupId>org.example</groupId>
<artifactId>my-app</artifactId>
<version>1.1.0</version>
The do a "release" build based on a tag. My flow was
commit and push
build - mvn clean install, results in my-app-1.1.0.jar
deploy to a test env and run regression tests, if they succeed, we tag the commit with a "passed_tests" tag
CI fires on tags that match "passed_tests" - this needed to be the same commit that resulted in the jar under test
runs mvn -f ./pom.xml versions:set -DnewVersion=${gitProps['git.build.version']}_${gitProps['git.commit.id.abbrev']}
On the disk, our maven version is now:
<groupId>org.example</groupId>
<artifactId>my-app</artifactId>
<version>1.1.0-abcdef</version>
then runs mvn deploy. This is the artifact that gets deployed to the repo and now we have a jar file (or whatever) that has a version matching the git commit.
You could use the same process for all your target architectures.
I have a legacy project that I'd like to convert to a Maven project for dependency management.
The problem is, that I have one jar (fop-1.1.jar) that I had to edit. It differs from the one that is publicly available and I only have it locally. But I need it this way.
What I tried to do, following several similar how-to's, it to create a fake Maven repo inside the project (local repo is no good, because several people work on that project and the solution has to be self-contained on Git) and reference this repo from the pom.xml. Sounds like the way to go for me, but it doesn't work. Eclipse show the project repo grayed-out :(
What am I missing?
BTW: this is what I tried to follow: https://devcenter.heroku.com/articles/local-maven-dependencies
Let me suggest another way: When we need to "edit" a jar, we give it a special version number like 1.1-edited instead of 1.1.. Then we can easily upload it to our normal Maven repository and use it. Maven even makes sure that you do not accidentally load both versions in the same project because the edit is only in the version number.
I guess what you need is a private maven server(I guess it exists), and then execute command to deploy jar( before deploy, check your account has privileges)
mvn deploy:deploy-file -Dfile=${jarFilePath} -DgroupId=${groupID} -DartifactId=${artifactId} -Dversion=${version} -Durl=${privateServerURL} -Dpackaging=jar -DrepositoryId=${privateServerURLInYourMavenSettings.xml}
,
after deploy successfully, add maven dependency
<dependency>
<groupId>${groupID}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
</dependency>
I install my artifact inside the local repository with the command:
mvn install:install-file -DgroupId=com.rules
-DartifactId=rulesID -Dversion=0.1 -Dpackaging=jar -Dfile=rules.jar
then i resolve the artifact into my java code using:
org.drools.compiler.kproject.ReleaseIdImpl releaseId =
new ReleaseIdImpl("com.rules", "rulesID", "LATEST");
And every thing works pretty well.
The day after, it seems that the repository expires, and I need another "mvn install" to get things to work again. The exception I get is this:
Caused by: org.eclipse.aether.resolution.VersionResolutionException:
Failed to resolve version for com.rules:rulesID:pom:LATEST: Could not find metadata com.rules:rulesID/maven-metadata.xml
in local (C:\Users\gpiazzolla\.m2\repository)
at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:312)
In fact, the maven-metadata.xml inside that directory seems to disappear.
The content of "maven-metadata-local.xml" after reinstall is:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.rules</groupId>
<artifactId>rulesID</artifactId>
<versioning>
<release>0.1</release>
<versions>
<version>0.1</version>
</versions>
<lastUpdated>20150604080940</lastUpdated>
</versioning>
</metadata>
You are going about this the wrong way.
In general, it is not a best practice to design software which depends on a non-specific version of an artifact. Also, the "LATEST" field is only intended for plugin resolution. And note that the way LATEST works, may not always guarantee the latest version to be used.
Internally, Maven 2.x used the special version markers RELEASE and
LATEST to support automatic plugin version resolution. These
metaversions were also recognized in the element for a
declaration. For the sake of reproducible builds, Maven 3.x
no longer supports usage of these metaversions in the POM. As a result, users will need to replace occurrences of these metaversions
with a concrete version. from Maven 3.x Compatibility Notes
If you need the highest version of a released non-plugin artifact you should be using version ranges, see section 3.4.3 here or this answer for an example.
Finally I've managed this.
There is a bug when is used the Drools implementation to find the artifact and the maven repository is local and not remote.
Check this out: DROOLS-465
There's a library that I am using in my project and I have gone through many versions of it during development, so my local Maven repository contains many of the older versions of this library.
I suspect conflicts might be causing some strange issues I have been having, so I want to eliminate all but the latest version of this library from my local maven repository.
How do I do this?
If it makes any difference, I am currently using a SNAPSHOT version of this library (as recommended by its developers).
PS: deleting the entire repository is not a very practical option, as the repo is currently over 1.2G and I have a slow, capped connection.
If you know the dependency coordinates you can delete them manually from the local directory. For example if this was your dependency:
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>2.9</version>
</dependency>
On Linux you could run:
rm -rf ~/.m2/repository/org/glassfish/jersey/jersey-bom/
On Windows you can use explorer to delete it or run:
rd /S /Q C:\Users\%username%\.m2\repository\org\glassfish\jersey\jersey-bom\
purge-local-repository plugin for maven could help in this situation.
Try to execute maven with following command :
mvn clean dependency:purge-local-repository -DreResolve=false -Dverbose=true -DactTransitively=false