I've been thrown into an existing software development project that is using Maven in a NetBeans Java project.
I've fetched the source from the blessed git repo into a freshly installed NetBeans 8. If I build and run it, it runs. :-)
I have to edit the GUI of the program which is created with the NetBeans GUI generator. If I try to open the GUI editor, it always marks some components that extends JXPanel
as invalid, because of the following error:
java.lang.NoClassDefFoundError: org/jdesktop/swingx/JXPanel ... caused by java.lang.ClassNotFoundException: org.jdesktop.swingx.JXPanel
I simply do not understand it – the files swingx-1.6.jar and swingx-beaninfo-1.6.jar are in the Dependencies section of the project (without "!"), I've added them to Libraries Manager, and I've added them to Palette. The program runs, but why, why, why can't NetBeans GUI Editor find the classes?
What am I doing wrong?
The following is an excerpt from pom.xml:
<dependency>
<groupId>org.jdesktop</groupId>
<artifactId>swingx</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${basedir}/lib/swingx-1.6.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jdesktop</groupId>
<artifactId>swingx.beaninfo</artifactId>
<scope>system</scope>
<version>1.6</version>
<systemPath>${basedir}/lib/swingx-beaninfo-1.6.jar</systemPath>
</dependency>
I got it fixed now – thanks to @Asprise Support, who pushed me into the right direction.
The problem seems to be that matisse cannot handle the
<systemPath>${basedir}/...
entries in pom.xml indeed.So, the only thing one has to do is to load the dependencies from a repository. If they are already in some repository: Great. If not, create your own local one and refer to it:
maven-repo
mvn deploy:deploy-file -Durl=file://<absolute-path-to-repo> -Dfile=<path-to-jar> -DgroupId=<groupId-from-pom.xml> -DartifactId=<artifactId-from-pom.xml> -Dpackaging=jar -Dversion=<version-from-pom.xml>
Add the new repository to pom.xml:
(The last two steps come from https://devcenter.heroku.com/articles/local-maven-dependencies)
~/.m2/repository
orC:\Users\<yourUserName>\.m2\repository
Now, Matisse should work – it doesn't understand the new
${basedir}
in the pom.xml either, but Maven does, and Matisse gets the dependencies from Maven's cache afterwards (imho).