Local Maven Repository M2 Sync with Nexus Release Deletion - maven

Coming from Maven integration with Artifactory, now I'm facing Nexus, that's a good thing!
I just want to know what could be the best way for you to perform the below action.
When i delete some releases of Nexus (eg 1.0, 1.1, 1.2, 1.3), i would link to sync the deletion with our Jenkins Maven local repository (.m2), in order to keep it clean, and without perform a manual deletion...
I know that a good answer could be just clean .m2 every week or something like this, but in this case it will spend many times to download all the artifacts needed...
So, have you an idea?
Thanks a lot!

Related

Mapping the artefacts of one nexus Repository instance to another instance

I'm new to the nexus world. I wanna move all the artefacts from one nexus repository to another nexus repository instance.(or you can say I wanna migrate the repos)
below is the nexus instances I've and their current version.
one Nexus Instance (Source Repository instance): Nexus Repository Manager OSS (2.14 version)
2nd Nexus Instance (Destination Repository Instance):Sonatype Nexus (2.11 version)
Is there any way to do this:-
I know one solution which is a manual solution, one can manually move the repository from source to destination storage.
https://community.talend.com/s/article/Manually-migrating-artifacts-from-one-Nexus-environment-to-another-S5taY?language=en_US
I went through this solution thread of nexus community as well but not able to find out. ):
https://community.sonatype.com/t/to-copy-single-repository-from-old-instance-to-new/1679
Is there any 2nd way to achieve this like can we use any Jenkins plugins, or some script that can help us to achieve above or any rest api's way?
It would be very helpful if someone answer this.
Thanks in advance.

What is the best practice for archiving Jenkins pipeline artifacts

I see that you can add a goal to a maven Pom to archive artifacts to a repo manager such as nexus
https://www.baeldung.com/maven-deploy-nexus
distributionManagement>
   <snapshotRepository>
      <id>nexus-snapshots</id>
      <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
   </snapshotRepository>
</distributionManagement>
But Jenkins also allows you to do this from the pipeline itself
https://wiki.jenkins.io/plugins/servlet/mobile?contentId=96076078#content/view/96076078
freeStyleJob('NexusArtifactUploaderJob') {
steps {
nexusArtifactUploader {
nexusVersion('nexus2')
protocol('http')
nexusUrl('localhost:8080/nexus')
groupId('sp.sd')
version('2.4')
repository('NexusArtifactUploader')
credentialsId('44620c50-1589-4617-a677-7563985e46e1')
artifact {
artifactId('nexus-artifact-uploader')
type('jar')
classifier('debug')
file('nexus-artifact-uploader.jar')
}
artifact {
artifactId('nexus-artifact-uploader')
type('hpi')
classifier('debug')
file('nexus-artifact-uploader.hpi')
}
}
}
}
What is the difference between the two approaches, is one more commonly used?
The main difference is that if you use maven, you can manually add artifacts to Nexus from your local computer, using mvn deploy. So it really comes down to how you want to create the artifacts that end up being used in production. In my experience, the preferred way of doing this is through using Jenkins. The advantage of using Jenkins is that you link your new version builds to other activities, as well as the possibility to trigger a release when certain conditions have been met, rather than starting the build manually. Also, you end up with all versions being built on the same platform, and you avoid differences between computers if every developer builds such versions from their own computer.
But you might still need the maven configuration. Jenkins might use this information to find the URL to upload the artifact to (your example says nothing about how Jenkins finds Nexus), and sometimes it is useful to upload a SNAPSHOT-version, or some other temporary version not meant for production. In your example you only define Nexus for upload SNAPSHOT-versions, I guess this is done on purpose to enforce a rule that uploading final version from local computers is disallowed.
By the way, having a repository defined in your pom.xml does not automatically mean that anything will be uploaded. It is only if you do mvn deploy with a repository defined in your pom that something will be uploaded.

How to build a mirror server for springframework

Using Springframework Repo central in China is a pain. I am thinking about to build a mirror for springfw repo.
Like there are plenty of mirrors around the around for maven center repo.
And I know the structure for maven center and springfw repo are both artifactory from Jfog.
So I think it is possible to set up a mirror for springfw, right?
I've used Sonatype Nexus to do this before, it's available in an open source version that you can run yourself.
I'd recommend setting it up in proxy mode which means that you will fetch all your artifacts from it and it will in turn fetch artifacts from the upstream mirror the first time and then serve them from a local cache in the future.

The new API is still under heavy development but you can try it now via Maven Central snapshots

I do not know about 'Mavean Central snapshots', so can anyone explain the sentence below for me, thanks so much!
The new API is still under heavy development but you can try it now via Maven Central snapshots.
le an,
Maven Central is a repository for sharing jars, analogous to the way GitHub is a repository for sharing source code.
Saying a jar is under Maven Central "snapshots" means you can get a copy of the jar but it hasn't been tested, might be broken, and might be changed sometime soon.
This is like saying code has been committed to GitHub "development trunk," it's a way of saying "use it at your own risk."
Hope that helps.

Maven + Hudson + Nexus: Access to SNAPSHOT Build Number

Now that Maven3 has dropped support for setting uniqueVersion=false on deployment, I'm running into an issue. I have Hudson do an automatic deployment of my SNAPSHOT build to my Nexus repository manager. The resulting SNAPSHOT artifact looks like blah-0.0.1-20110517.233746-1.jar. Note the unique SNAPSHOT build id. The trick is that I'd link to that jar in my site documentation, but I'm not sure how to inject that snapshot build number into the docs. Perhaps there is a way to have Maven or Hudson or Nexus create a symlink on deployment from blah-0.0.1.jar => blah-0.0.1-20110517.233746-1.jar?
Ok, mod me down, but I think I found an answer to my own question. I'm posting here in case anyone else finds it useful.
It turns out the Nexus REST api has the ability to automatically retrieve the latest SNAPSHOT build of an artifact, which is exactly the functionality I needed. For more info, see:
https://docs.sonatype.com/display/SPRTNXOSS/Nexus+FAQ#NexusFAQ-Q.HowcanIretrieveasnapshotifIdon%27tknowtheexactfilename%3F

Resources