Deploy Maven artifact to remote file system - maven

I have a jar that I am packaging in Maven, that is outputted to my target directory.
I want to put that jar to remote file system (via ssh or sftp) as part of the build process.
I have tried several methods, but nothing seems to work quite right. Any suggestions?

Related

Copying Artifact from local Maven repository to remote

I am trying to implement a staged CI/CD pipeline with a Gradle library. I have managed to get Gradle publishing the produced library to a local Maven repository (build/repository). What I'd like to do then is manually 'promote' the artifact in this local repository to a remote one. A different remote one for each stage in the build pipeline.
And I don't want that logic to be part of Gradle. What I'd like is a way to simply run a Maven command (mvn) to copy the artifact in build/repository to http://myrepositoryurl. I've found Maven copy:stage. However, it fails with some exception about missing implementation for org.apache.maven.plugins.stage.RepositoryCopier.
Problem is I know nothing about Maven, and don't know what this means. It recognizes 'copy', as it is trying to Do Something, and has figured out that RepositoryCopier at least is the thing it needs. But it won't work.
What do I need to do to get this to work?
AFAIK there is not Maven command to copy from a local repository to a remote one.
Maven deploys files from the target directory to remote repositories.

Gradle doesn't download jars

I am working on a gradle project that should run on a machine without internet connection.
For that, I have created a task that takes the gradle cache and copies it into another directory, to be used as a local repository.
I have built the project in online mode and it worked.
I have ran my task to copy the cache to the local repository and it worked.
However, when trying to run gradle build --offline I am getting errors like this (for several different jar files):
Could not download commons-math3.jar (org.apache.commons:commons-math3:3.4.1): No cached version available for offline mode
Checking both my local repository and the gradle cache, I couldn't find the relevant jar file (in this case commons-math3-3.4.1.jar).
I have tried using gradle build --refresh-dependencies, I have tried to delete the cache and then using gradle build - nothing, it wouldn't download the jar files, only the pom files.
I have even tried to download the jars manually and put them in the correct directories in my local repository did not work.
Any help would be appreciated.
I don't think the Gradle cache can be transferred to another machine like this. I'm trying to create a plugin which can copy the dependencies from a configuration to a local directory for offline usage here but I've hit this issue where parent POM's and BOM's can't be accessed from the Gradle API's. I've got a failing test here demonstrating the usage of the plugin and the lack of parent POM support.
One of the suggestions on the issue is to try the IvyPot plugin. I haven't tried this myself but it might work for what you are attempting.
You might have proxy enabled, add proxy details in "gradle.properties" file like below:
systemProp.http.proxyHost=your.proxy.com
systemProp.http.proxyPort=XXXX
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=password

Copying jar from local Maven repository

I'm working on a sort of deployment script for a Java project using Python/shell. The script currently can copy jars either from a Sonatype Nexus repository or from the project's target folder. The remote/Nexus setup seems all good, but I'm interested in instead copying from the local maven repository because allows me to always know the location of the jar regardless of where the project is installed.
I guess my question is: Am I overlooking anything by just copying the first jar from the folder ~/.m2/repository/{groupid}/{artifactid}/{version}? Or is this totally a good way to go about this?
If the groupId consists of more than one part, for example org.apache.httpcomponents , then the folder structure reflects this: org/apache/httpcomponents/...
There may exist more than one jar file inside the version directory.

How to stop maven deploying test jar files

Maven has a useful facility to create jar files for tests that can be depended on by other projects. We use the "easy way" from this page. This all works fine, and produces files of the name foo-1.0.0-tests.jar.
By default, these test jar files are installed and deployed. The question is how to have them be installed, but NOT deployed?
(There is no need or desire to publish these files to maven central, but they are needed when running tests locally. Thus install is correct, and deploy is not.)
The maven deploy plugin appears to have has no suitable options. The build-helper-plugin has the ability to attach file to deploy, but not to remove them.
Any suggestions to get these jar files installed, but not deployed?

maven - how to deploy non-jar files

In my project I have many modules.
One of the modules requires a jar file to be deployed to the repository which it does fine.
The others involve every other kind of file: zip, kar etc.
I can see the zip get uploaded if I look for it via the terminal but if I browse Archiva it is not there.
The kar file, for example, does not need to be built but it's being worked on and is currently manually uploaded to the repository (Archiva). This is not desirable.
Each module has a POM and each POM uploads empty jar files to Archiva when it is built (with Jenkins). How can I avoid that? And can I copy files to Archiva without them having to be built into a jar file?
You can also give a try to "maven-deploy-plugin"
Invoke a maven target in jenkins with this plugin and provide the suitable parameters.
You would also need the repository to be added in you settings.xml if your repository requires login credentials and then use the ID, you mentioned in settings.xml, in the maven target.
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file
-Durl=<artifact-repo URL>
-Dfile=<name of the file>
-DgroupId=<Group Id>
-DartifactId=<Artifact Id>
-Dversion=<VERSION>
-Dpackaging=<packaging Type>
-DrepositoryId=<ID as mentioned in settings.xml>
Hope this may be of some help.

Resources