Add custom, local project to integration-distribution - opendaylight

I am trying to add a custom project to the distribution. The project that I created via
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ -DarchetypeCatalog=remote -DarchetypeVersion=1.6.0-SNAPSHOT
is (obviously) not available via the official nexus. I did not do any changes to this project.
I fired up karaf in distribution and tried to add the new project as a new repository via
feature:repo-add mvn:org.opendaylight.flowlistener/features-flowlistener/0.1.0-SNAPSHOT/xml/features
and received this error:
Adding feature url mvn:org.opendaylight.flowlistener/features-flowlistener/0.1.0-SNAPSHOT/xml/features
Error executing command: Error resolving artifact org.opendaylight.flowlistener:features-flowlistener:xml:features:0.1.0-SNAPSHOT: [Could not find artifact org.opendaylight.flowlistener:features-flowlistener:xml:features:0.1.0-SNAPSHOT in opendaylight-snapshot (https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/)] : mvn:org.opendaylight.flowlistener/features-flowlistener/0.1.0-SNAPSHOT/xml/features
Is it generally possible to add projects that only exist locally? What am I doing wrong?
Thanks in advance!
Max

Artifact repositories are configured using etc/org.ops4j.pax.url.mvn.cfg in Karaf. The configuration shipped in OpenDaylight only uses the Karaf system directory; it ignores the local Maven repository entirely.
To add your local Maven repository, you should edit the org.ops4j.pax.url.mvn.repositories entry at the end of the file to include your Maven repository:
org.ops4j.pax.url.mvn.repositories= \
file:${karaf.home}/${karaf.default.repository}#id=system.repository, \
file:${karaf.data}/kar#id=kar.repository#multi, \
file:${user.home}/.m2/repository#snapshots#id=m2.repository
By the way, unless you intend to contribute your project to OpenDaylight, you should avoid using the org.opendaylight namespace.

Karaf distribution uses the settings in etc/org.ops4j.pax.url.mvn.cfg to resolve maven artifacts. You will have to tweak these settings (e.g. maven local repo) for the distribution to find your local project. There is some in-line documentation on how to edit this file:
https://github.com/apache/karaf/blob/master/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.url.mvn.cfg

Related

Automated deployment of EAR project without obtain dependencies from a repository

Is it possible deploy an artifact (.ear) into a application server (AS) without obtain its dependencies from a repository?
Let's me explain: the maven project I'm trying to configure for deploy into a AS has 3 modules:
Web (.war - front end)
EJB (.ejb - back end)
Entity (.jar - entities classes)
These modules are wrapped into a EAR module and none of then are available in some repository (like Nexus or JFrog Artifactory). When I try to use Cargo Maven plugin or JBoss Deployment Maven Plugin, both notify that cannot resolve dependencies for these modules.
UPDATED (03/01/2019)
The issue is similar to that quoted in items 6 and 7 of the following link: http://webdev.jhuep.com/~jcs/ejava-javaee/coursedocs/content/html/ejb-basicex-eardeploy.html#ejb-basicex-eardeploy-testmodule
It's a workaround but worked. Instead of the project depends on an internal repository (like Nexus or JFrog Artifactory), it's possible defines a folder as a repository on the local machine using the Maven's parameter -Dmaven.repo.local. Thus, the plugin to deploy the artifact also can use this property and obtaining the others artifacts.
That is, to build the application on the current folder:
mvn -Dmaven.repo.local=. package
To deploy the application (.ear, in this case) using Cargo Maven Plugin, for example, without depending on an internal repository:
mvn -pl app-ear/ -Dmaven.repo.local=. cargo:redeploy
OBS: Using the maven.repo.local property, the folder defined as value will be fill with all dependencies of the project. In my case, it isn't a problem because this commands are been used on a continuous integration pipeline and all files and folder are discard on the final.

Creating maven project from local Maven repo

I am trying to create a maven project in a Windows virtual machine. But am unable to create as there is a proxy setting that doesn't allow me to connect to https://repo.maven.apache.org/maven2
But I do have another link that have the maven repos. But am not sure how to create the maven project using the link that I have. Can someone help me?
Thanks
You can specify another repository in your pom.xml file, but you’ll have to do it for every maven project you’ll build.
You can also specify that repository in your settings.xml file, which will be available to all maven projects.
See the informations here : https://maven.apache.org/guides/mini/guide-multiple-repositories.html

How to update maven package after commit/pull-request

I am using a package https://github.com/dhatim/fastexcel, resently there was a commit in their repo, but the version had not been changed in Readme(description) of package in git hub, how can I update the package using maven?
I tried to run mvn release:update-versions, but I get this error
Then I run mvn release:update-versions -X
This is my pom.xml
The git repo is not equal the maven lib. You download maven libraries from the offical maven repository. The maintainer of the library needs to upload his artifact to the central repository when he builds a new release after that you can use this.
To see which version is usable you can use a maven search website like https://search.maven.org.
The dependency org.dhatim:fastexcel has a version 0.9.4 (same as the github release).
So it seems the developer already uploaded it but did not correct his Readme in the repository. So you can just use 0.9.4 in your pom.xml.
So always check the maven search site and if something is missing you can always add an issue to github to ask the developer uploading it.
There are also this more or less recommended possibilites to get library as a workaround:
Checkout and build the project by your self and add the jar file to:
something like nexus as own repository hosting (a organization normally has a maven proxy which could be used)
add it to the pom.xml as system scope dependency where the jar must be located on your system
use mvn install on the fastexcel project and change the version in your pom.xml to 0-SNAPSHOT

Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:1.1 from any of the configured repositories. while using in STS

I am able to create Spring Boot Starter Project and Maven Web Project from the STS, but somehow unable to create the maven-archetype-quickstart project in eclipse, its giving me below error
In my project, I am using cacert file and custom setting.xml
try
maven clean install -U
as your repository is cached so try to flush the cache using -U
I was able to solve this issue by simply deleting the .m2 folder and create maven project from scratch.
After facing the same issue and going through the message several times - I found that in the local repository i.e. .m2, under the location - org\apache\maven\archetypes\maven-archetype-quickstart\1.1 - we found the error in the file - 'm2e-lastUpdated.properties' as '#default-central-https://repo.maven.apache.org/maven2/.lastUpdated=1551236380266
https://repo.maven.apache.org/maven2/.error=Could not transfer artifact org.apache.maven.archetypes:maven-archetype-quickstart:jar:1.1 from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org'
So my Eclipse was not able to download the required JARS may be cause it is behind the firewall and in that case - Place the 'maven-archetype-quickstart-1.1.jar' and 'maven-archetype-quickstart-1.1.pom' in your local repo at the location - 'org\apache\maven\archetypes\maven-archetype-quickstart\1.1' using the link - JARS_POM and then follow the same step to create the maven Project.
Better solution is to use proxy through 'setting.xml' file of Maven to bypass the firewall to download Maven plugins and jars.
You should also check if the maven archetype catalog to eclipse is configured properly.

Maven without Internet connection

I'm new to maven project.
I'm changing an ant project to maven project.
To install the 3rd party jar's in maven local repository, I used install command.
Its trying to download the resource jar.pom.
I don't have download access in my organization so the build failed for installtion.
After request i got the resouce jar and clean jar in my desktop(also i can get other necessary jar).
How to make maven to use these jar for the process and how to install the jar in local repository without internet acess.
I downloaded the jar and placed in local repository but it couldn't point the path and use those jars.
please let me know what steps i have follow to run maven install and other commands to build the project without internet access.
where should i placed the jar which i have downloaded by external way.
Please guide me for building and deploying the project.
Thanks in advance.
http://maven.40175.n5.nabble.com/Maven-installation-and-using-in-project-without-Internet-conncetion-tp4564443p4564443.html.
http://www.coderanch.com/t/544641/Jobs-Offered/careers/Maven-installation-project-without-Internet#2471141
I've posted same question in these link
You need an internet connection. Maven isn't initially self-sufficient. It needs to download a bunch of plugins along with their dependencies and the dependencies of your own project. And this really depends on what sort of settings you have for your projects. One set up will require one set of dependencies, another - a whole different one. You can't download artifacts from the Maven Central manually and then install them locally one by one. Simply put, that sounds stupid.
I understand that you're coming from the Ant world where Ant has everything it needs on the local file system. However, Maven relies on the fact that it will have a central repository (either Maven Central, or your own repository - Nexus, Artifactory, etc.) from which to download the plugins and dependencies it needs. There is no point in you migrating to Maven, unless you'll be allowed access to the Central Maven Repository.
Yes, indeed, you can run Maven offline and you can have Maven produce a local repository for you to use when you are in offline mode. However, what you're trying to do is against Maven's principles.
If your company won't allow access to Maven Central, just stick to Ant. Your effort will be a waste of your company's and, ultimately, your own time.
In fact the maven strenght is mainly in the internet accessible repositories and automatic dependency management. But it's possible to use this tool to build your project if you have all dependencies required for your project in your local repository. Then you may use -o option for offline mode and maven will not try to download updated artefact versions.
To get the artifacts into you local repository you have several options:
1) connect to the internet once and mvn build the project (this will download all required dependencies)
2) install dependencies as jar to the local repository manualy (using appropriate mvn command)
I think the questioner is looking for -o or --offline option for mvn. This is a command line option and can be provided while executing.
I think you can setup your repo correctly and execute the mvn goals once when you are connected to internet and use the -o option for later executions .
Hope this helps.
~Abhay
You can configure maven to run in offline mode. Add this entry to your settings.xml
<offline>true</offline>
See here for further information:
http://maven.apache.org/settings.html
Before you can use offline mode, you have to install all necessary third party jars to your local maven repository.
mvn install:install-file
-Dfile=filename.jar
-DgroupId=com.stackoverflow
-DartifactId=artifact
-Dversion=1.0.0
-Dpackaging=jar
-DcreateChecksum=true
-DgeneratePom=true
It's much easier to get those jars in your local repository using an internet connection and online mode.
It's possible to install these resource jars in your local maven repo using install-file. This will make the available to the build. You'll have to do this for each individually, but once that's done you won't have to do anything special.
To be clear, maven puts everything in your local repository, both the jar you're building with this project and the various library jars. Because your system cannot be connected to the internet to maven can populate the local repo with your libraries, you'll have to use this manual approach.
Edit: You should be able to run install-file anywhere. When you do, you'll need to provide the groupId, artifactId, version, and packaging using the command line options. If you already have a POM file for the library, you can provide that instead via -DpomFile=your-pom.xml.
This question has some useful info: How to manually install an artifact in Maven 2?

Resources