Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven fails to get SNAPSHOT builds from repository

Our internal repository (Artifactory) now contains both the stable builds as well as SNAPSHOT versions of our internal libraries.

For stable builds there has never been a problem of downloading anything from the repository.

However, when I add a -SNAPSHOT, Maven claims to be unable to find the dependency, even though it is most definitely in the repository.

If I build and deploy the dependency locally (i.e. into my local repo) all works normally.

Basically, this works:

<dependency>   <groupId>com.example</groupId>   <artifactId>ourlibrary</artifactId>   <version>1.0.0</version> </dependency> 

and this doesn't:

<dependency>   <groupId>com.example</groupId>   <artifactId>ourlibrary</artifactId>   <version>1.0.1-SNAPSHOT</version> </dependency> 

Even though both versions were built the same way and deployed (as far as I can possibly tell) correctly to the repository.

The error:

Missing: ----------  1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT,    Try downloading the file manually from the project website.    Then, install it using the command:       mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file    Alternatively, if you host your own repository you can deploy the file there:       mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]    Path to dependency:         1) com.example:product:war:2.0.0-SNAPSHOT         2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

While this sounds similar to this question, the resolution arrived at there does not apply to my case.

Any insights into this issue would be greatly appreciated.

Edit

Running with -X (as John V. suggested) revealed the following:

[DEBUG] Skipping disabled repository central [DEBUG] ourlibrary: using locally installed snapshot [DEBUG] Skipping disabled repository central [DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com) [DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository    com.example:ourlibrary:pom:1.0.1-SNAPSHOT  from the specified remote repositories:   repo.example.com (http://repo.example.com/repo)   [DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile [DEBUG]   com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile) 
like image 810
Kris Avatar asked Nov 04 '10 14:11

Kris


People also ask

How often does Maven check for SNAPSHOT updates?

In case of SNAPSHOT, Maven will automatically fetch the latest SNAPSHOT (data-service:1.0-SNAPSHOT) every time app-ui team build their project.

What is SNAPSHOT repository in Maven?

A Maven snapshot is a special version of a Maven package that refers to the latest production branch code. It is a development version that precedes the final release version. You can identify a snapshot version of a Maven package by the suffix SNAPSHOT that is appended to the package version.

Why is it best practice not to release SNAPSHOT versions of Maven artifacts?

Rule #3 Never release using the Time-Stamped snapshot The release plugin will still fail if you do this because it correctly understands you have SNAPSHOT dependencies. The plugin has a flag to allow bypass this check and people unfortunately use it far too often.

How often Maven should check for a newer SNAPSHOT artifact in the remote repository?

Artifacts with a newer timestamp take precedence no matter where they come from. With the default settings "remote timestamps" are checked only once every 24 hrs.


2 Answers

Two thoughts come to mind:

  1. The path structure in your internal repository for your artifact is incorrect. I suggest running the maven command with -X parameter. It will display the maven's attempt at downloading the files. Get the line that has your repository as the url and try and look for it yourself.

    The path should look like

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. You didnt include your repository as a repository in your pom.xml
like image 175
John Vint Avatar answered Oct 06 '22 12:10

John Vint


Typically you have a separate snapshots url from releases url. Just different paths in the same repository, but listed as separate repositories in the pom. The one for snapshots needs to have snapshots enabled, and the one for releases has snapshots disabled:

<repositories>         <repository>             <id>central</id>             <url>                 http://<releases-url>             </url>             **<snapshots>                 <enabled>false</enabled>             </snapshots>**         </repository>          <repository>             <id>snapshots</id>             <url>                 http://<snapshots-url>             </url>             <snapshots>                 **<enabled>true</enabled>**                 <!-- never, daily, interval:X (where X is in minutes) or always -->                 <!--<updatePolicy>daily</updatePolicy> -->             </snapshots>             <releases>                 <enabled>false</enabled>             </releases>         </repository>     </repositories> 
like image 20
kevinmrohr Avatar answered Oct 06 '22 13:10

kevinmrohr