netbeans Maven PlugIn does not update remote repo index - maven

I am starting with a project where I want to use latest versions of hibernate and the hibernate spatial extension. Therefore I decided to start with a maven project to manage all the dependencies. I have to say, that I am pretty unexperienced both in using maven an the maven netbeans plugin, but I think it is the best option for my requirements. I am using Netbeans 7.2.1.
There is a short and simple description how to add the remote repos for hibernate spatial to maven (http://www.hibernatespatial.org/mavenquick.html).
I added these repo's in netbeans - services - maven repositories. Then I clicked on "Update Index" but nothing happens.
I also tried to open the repo Url in my Browser and I got all the files that it should deliver.
Why is Netbeans not updating the index? Is there a possibility to index the remote repo on maven commandline so that I am able to bypass netbeans and possibly get more info about what is happening?

I recommend you adding the repo you need into your {home}/.m2/settings.xml file (or alternatively your pom file in the project). That's where your Maven installation takes the configurations from at first. So that way you avoid using NetBeans to do that and you'll be sure that Maven will be using that repo no matter the way you call it (NetBeans embedded, command line...).
Add this repositories into your file:
<repository>
<id>OSGEO GeoTools repo</id>
<url>http://download.osgeo.org/webdav/geotools</url>
</repository>
<repository>
<id>Hibernate Spatial repo</id>
<url>http://www.hibernatespatial.org/repository</url>
</repository>
You'll probably find this guide from Maven official site useful.

I added these repo's in netbeans - services - maven repositories. Then I clicked on "Update Index" but nothing happens.
The Services/Maven repositories node only deals with indexes that help with some IDE searching capabilities. It's not affecting build in any way. If you want to change your build, either add it to pom.xml or to settings.xml in the usual maven manner. Please note that such active repositories should effectively show up in your Services node in the end.
Update Index action attempts to download the index from the remote location. There are multiple points of failure here. The repository might not provide an index, or your maven proxy settings don't allow you to connect (we use explicitly maven settings, not IDE proxy settings), your mirrors defined in settings.xml mirror this repository but don't provide the content for it.
Even if the index is downloaded and processed (you can browse the content in Services node), the individual artifacts might be missing from the index because the server side job updates only occasionally.
In any case you are not limited in any way when not having the index around. You can still add the dependency to the project if you know the coordinates. Either through the UI or by editing the pom.xml file.

Using version 11 of Netbeans I have been able to force the download of last archetype-catalog.xml from remote repo by deleting the cache ([].netbeans.cache\11\mavenarchetypes).

Related

Missing Maven Repositories node in Services tab in Netbeans

Maven is installed on my computer and Netbeans can find it because I can create a new project from Archetype just fine. However, I need to add some repositories on Maven but I don't know any other way other than the one in the services tab, but for some reason, the Maven Repositories node in the services tab had gone missing (it was there before). I tried restarting netbeans and closing the services tab and opening it again. Is there any other way to add repositories to Maven or have the Maven Repositories show up again?
I am using Apache Netbeans 12.
Thanks.
Edit:
I attached a screenshot of the specific problem. I have Maven correctly installed and can create a new project. But I can't add a new archetype catalog because "Maven repositories" is missing:
After checking the suggestion of #skomisa, the log showed that the error is caused by me adding a repository that is unavailable. How do I remove this repository since the "Maven Repositories" option is unavailable in services? Thank you.
NetBeans is coming with bundled version of Maven. So when you've installed maven and NetBeans is able to create a new project. It does not mean NetBeans is using our installed version of Maven.
When you add a repository to the services tab it already mentions:
Adding a repository here doesn't affect your Maven builds in any way.
It's only used to provide the IDE with information from the repositorie's index
Since you haven't described what you want with that repository I assume that it's needed to retrieve artifacts from that repo. So most likely you need to add the repo to your project's pom.xml in the <repositories> section.
I solved the problem by reinstalling Netbeans and deleting the cache in C:\Users<user>\AppData\Local and Roaming.

Maven Central is which exactly repository?

Are https://mvnrepository.com/repos/central and http://central.maven.org/maven2/ the same maven repository (called Maven Central)?
Also there is https://repo.maven.apache.org/maven2/ which also calles itself a Central Repository.
I use mvnrepository.com as I find it more convenient, but many referencies to Maven Central in Internet lead to http://central.maven.org
Besides both sites above are for Maven2, right?
What are the analogues for Maven3?
Besides is Maven3 widely used?
As far as I know, mvnrepository is just a search site that is not maintained by the maven people directly. It's a search site as I see it. It has been around for a while. Since it contains multiple repository source to search in and lets you select which one you work with its pretty transparent and I don't see any harm there.
If you execute mvn help:effective-settings you should be able to determine what repositories are used, in case some changes where made. The current central default in maven seems to be https://repo.maven.apache.org/maven2/ - the official search interface being https://search.maven.org/
You can also look into the maven sources of the pom what config you running on.
The /maven2/ part in the Uri only means what repository format is used within. This has not changed for maven 3 (it was different for maven 1). So it's the correct and current one today, there is no maven 3 repository format. Everything new could be added to the maven 2 format (for example some search index files or checksum files).

How to change updatePolicy for my local Maven repository?

I know how to do it for an external repository but not for my local repository, since I don't have a <repository> for my local repository in my settings.xml.
I use snapshot versions for my sub-projects, so when I re-build the parent project I want maven to get all the sub-projects snapshot versions from my local repository not only once a day (which seems to be what happens by default) but always.
If I'm understanding your comment, I think #FrVaBe may have the correct answer. When you change code for a child project on your development machine, it's up to you to rebuild the snapshot and get it into your local artifact repo (via mvn install) so it's available for the parent project to use.
If, however, you want your parent project build to pull in changes made by your teammates and published to the corporate remote repository more often than once per day, read on.
Here is a summary of how Maven central (and kin), remote repositories (e.g a company instance of Nexus or Artifactory) and your local repository work together. If you always want the latest version of snapshots to download on every build, go into your settings.xml file, find <snapshot> repository containing the snapshot you want, and change the <updatePolicy> value to "always". Personally I rarely do this, I simply add the '-U' option to my mvn command line when I want to ensure I have the latest version of a snapshot from my remote repo.
There is no update policy for the local repository!
The local repository is just a bunch of files. When you install to your local repository your local projects already reference the artifacts directly. There is no update that needs to be performed except that maybe your IDE needs to be refreshed to pickup the newer files.
In this manner you can build local snapshots all day long with no versioning headaches, no updates required and no old artifacts left hanging around afterwards. Nice and clean but not so obvious if you're new to Maven and still getting to grips with all these repositories and their fancy update mechanisms.
I think you missunderstood something. Maven will always take the latest/newest SNAPSHOT from your local respository. But in your project setup (Project Inheritance) you need to build the sub projects on their own if you changed something.
An automatical build of the sub project only happens on a Project Aggregation layout.
The difference is explained in the Project Inheritance vs Project Aggregation section of the documentation.

Maven and ibiblio

I searched a lot in apache documentation and ibiblio.org and I could not find a decent straight answer.
My questions:
When I download a jar using maven dependency (setup in pom), how can I be sure that the file does not change on the remote repository? for example, if I'm using log4j version 1.2.3, downloaded from ibiblio.org (or any other repo for that matter), how can I be sure I'm getting the exact same jar each time?
Does maven delete jars from the local repository? let's assume I'm not clearing the repository at all, will it fill up eventually? or does maven have some kind of mechanism to clear old jars?
In Maven conventions a released version like log4j 1.2.3 will never be changed. It will be left in your locale repository until you manually delete it. It can't be changed by anyone except for the admins on maven central, but i suppose they don't do such a stupid thing.
Furthermore the download by default is done from maven central (repo1.maven.org/maven2 instead of ibiblio).
One of the "tricks" in Maven is download an artifact (released) only once...that improved your build performance in contradiction to the SNAPSHOT dependencies.
You could configure your own repository, and point all your project poms at that. It's easy to configure your poms to use a different (private) repository, but I've never set one up myself. Doesn't seem too hard, other than managing it to keep all the needed artifacts available.

How to enable inside glassfish access to maven repository?

I have a following problem. We have a central maven repository hosted on our company server. Our team is working on a project. Everyone here uses that repository to get the required artifacts. If something is missing at the moment and is required for the task that the developer is currently dealing with, he installs this artifact manually to the central repository, so that his commits don't break the automated builds.
Now, each developer also has Glassfish v2 installed on his machine. That is for testing and debugging purposes. Before committing the changes, developer makes the .ear for the project with Maven help. However, after the developer deploys the ear to it's local glassfish, frequent errors arise, because the set of glassfish libraries may not contain all the latest dependencies of the central company repository.
Right now in case of the error the developer simply reads the log and looks what exactly is missing. After that he manually copies the required jar inside his local $GLASSFISH_HOME$/lib dir. But that seems a little bit frustrating. How can this be done automatically?
Right now we are trying to implement the following solution. The developer has to synchronize his local maven repository gathering all the artifacts from the central one that are required by the project. This local repository has to be placed on the java classpath, so that glassfish would also see it. Is that a correct approach? Maybe there is a way to install directly all the required artifacts from the central repository inside $GLASSFISH_HOME$/dir and this can be done automatically during deploy?
About having to install dependencies. If the developers need to install dependencies missing from public maven repositories, take into account that usually maven proxies have the ability to cache public repos. For instance, archiva has a proxying cache. If the dependencies are your own project deliverables you should consider releasing and deploying with maven to your company repo.
About latest versions. You need to specify maven what version of dependencies should use. I would prefer editing my poms manually, anyway there's a variety of ways to achieve that.
The libraries should be part of the project, I think. If not standard libraries of glassfish, they should be included, for instance, in your war file as part of your project. If not standard but not part of your project (not the regular approach) consider managing this glassfish as a project on its own (own git/svn repo, own pom, own versions, own everything).
Good luck.

Resources