Download Maven artifacts in Jenkins from another repo if one fails - maven

In my Jenkins build I have a settings.xml file for pulling Maven dependencies. An artifact, if not found, should be downloaded from another Maven repo not specified in a settings file. Can this be done using code in Jenkinsfile? Any thought will be greatly appreciated.

Related

Integrate the local maven plugin with remote repository

I have created a simple maven plugin and installed it in my local repo(.m2). Now I want to use that plugin with a git repo(maven project). How can I do that?
Currently, I am trying to build my git repo using Jenkins and it throws below error-
[ERROR] Plugin sample.plugin:hello-maven-plugin:0.0.1-SNAPSHOT or one of its dependencies could not be resolved: Could not find artifact sample.plugin:hello-maven-plugin:jar:0.0.1-SNAPSHOT
I believe simply changing the pom file of my git repo won't work. What should I do so that it resolves the plugin dependency by looking into the .m2 dir first
Your Jenkins probably deploys to a Nexus or Artifactory server. That server is also the right place to manage your plugin.

Will Maven overwrite a manually patched jar in local Maven repo?

I have a Maven project that works just fine.
In order to triage an issue, I manually patched a jar to add debug logging and then copied it to the local Maven repo directory. I made subsequent changes to the jar file to add more debugging and did a mvn install:install-file since that seemed more "official".
Note that I did not change the coordinates at all (I know that artifacts are meant to be immutable, but I did not want to change pom.xmls).
My question is: when (if ever) will Maven overwrite this patched jar with the one in the remote Maven repository which is considered the source of truth?
There are only three scenarios in which that jar can be overwritten:
If you delete the jar from your local m2 repository, it will be downloaded from the remote repository the next time you build your maven project.
If you build your maven project with '-U' option. Doing this will force maven to update the dependencies from remote repository.
If you perform an mvn install on the same artifact(updated code) with the same version.

find out from which maven repository the jar is coming from

There is a plugin that works properly in my co-worker's system but doesn't in mine. I suspect it because of a repository included in his settings.xml but not in mine. Is there a tool that I can use to figure out from which repo is this plugin being downloaded from?
Maven stores that info in a file called _maven.repositories in your local maven repository (typically ~/.m2/repositories) for each artifact. The file is located right beside the corresponding artifacts in the local maven repository.
This file will typically list the repository / plugin-repository that the artifact was downloaded from. This matches to the repository from your settings.xml file.
In Maven 3, the file seems being changed to _remote.repositories

How to deploy JAR to Maven remote repository

Is there any way to put my JAR file in remote repository, so my maven project can get this JAR file from any place via Internet?
I have downloaded and did some fixes in the ReportNG project: https://github.com/dwdyer/reportng .
Using ANT I have compiled this project into JAR, now I want to put it into remote Maven repository, but don't know how I can do that.
Could somebody please suggest me the way, how I can perform that?
If it is a released version you want to make available in maven central follow this guide: http://maven.apache.org/guides/mini/guide-central-repository-upload.html
I'm no github professional but since a maven repo is just a file structure with some meta-data you can put it anywhere maven can read it (ftp, http, ...). so you could create a git repo to host your maven artifacts. see http://cemerick.com/2010/08/24/hosting-maven-repos-on-github/ for an example. (it may be outdated - github may have something like maven repo hosting, I just dont know)
A lightweight way to create your own maven repository is to store it on github. See Hosting a Maven repository on github for more details
I followed sonatype open source project maven deployment guide https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide and successfully deployed the latest version of reportNG into maven central repository. Now maven have both 1.1.3 and 1.1.4
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.uncommons%22%20AND%20a%3A%22reportng%22
You should do a pull request to the github project. If the maintainer likes your fix he will put it in the next version.
If you need your fix in a remote repo NOW then you'll have to setup your own maven repository.

Configure Maven or Nexus to link trunk artifact at static URL

My current Jenkins deployment job retrieves war file generated from maven build process from Nexus repository. The deployment is done this way since I can not use hot deployment for my environments. Currently I used parameterized build with Jenkins so I can manually enter the version number for my artifact. Is there a way to configure Maven or Nexus so the artifact generate from the latest trunk build can be accessed from an static URL? For example:
http://mynexus:8081/nexus/content/repository/snapshots/com/somepackage/my-app/trunk/my-app-trunk.war
I don't know a way to do this in Nexus. But you can access the latest successful build from Jenkins, with a URL like this: http://localhost:8080/jenkins/job/jobname/lastSuccessfulBuild/my-app-trunk.war
You have to enable artifact archiving for your war file, then you can access it.
Same issue here, we discovered about :
https://wiki.jenkins-ci.org/display/JENKINS/Maven+Deployment+Linker
Which does the job.
Hope that helps.

Resources