Netbeans platform projects - Probleme mit umschlossenen JAR-Dateien mit Abhängigkeiten
-
23-09-2019 - |
Frage
Für den Anfang geht es bei dieser Frage weniger um die Programmierung in der NetBeans-IDE als um die Entwicklung eines NetBeans-Projekts (z.verwenden des NetBeans Platform Frameworks).
Ich versuche, die BeanUtils-Bibliothek zu verwenden, um meine Domänenmodelle zu überprüfen und die Eigenschaften bereitzustellen, die in einem Eigenschaftenblatt angezeigt werden sollen.Beispielcode:
public class MyNode extends AbstractNode implements PropertyChangeListener {
private static final PropertyUtilsBean bean = new PropertyUtilsBean();
// snip
protected Sheet createSheet() {
Sheet sheet = Sheet.createDefault();
Sheet.Set set = Sheet.createPropertiesSet();
APIObject obj = getLookup().lookup (APIObject.class);
PropertyDescriptor[] descriptors = bean.getPropertyDescriptors(obj);
for (PropertyDescriptor d : descriptors) {
Method readMethod = d.getReadMethod();
Method writeMethod = d.getWriteMethod();
Class valueType = d.getClass();
Property p = new PropertySupport.Reflection(obj, valueType, readMethod, writeMethod);
set.put(p);
}
sheet.put(set);
return sheet;
}
Ich habe ein Wrapper-Modul um commons-beanutils-1.8.3 erstellt.jar und fügte eine Abhängigkeit von dem Modul in meinem Modul hinzu, das den obigen Code enthält.Alles lässt sich gut kompilieren.Wenn ich versuche, das Programm auszuführen und die Eigenschaftenblattansicht zu öffnen (d. H..der obige Code wird tatsächlich ausgeführt), erhalte ich die folgende Fehlermeldung:
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:254)
at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:259)
Caused: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory starting from ModuleCL@64e48e45[org.apache.commons.beanutils] with possible defining loaders [ModuleCL@75da931b[org.netbeans.libs.commons_logging]] and declared parents []
at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:261)
at java.lang.ClassLoader.loadClass(ClassLoader.java:254)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399)
Caused: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.PropertyUtilsBean.<init>(PropertyUtilsBean.java:132)
at org.myorg.myeditor.MyNode.<clinit>(MyNode.java:35)
at org.myorg.myeditor.MyEditor.<init>(MyEditor.java:33)
at org.myorg.myeditor.OpenEditorAction.actionPerformed(OpenEditorAction.java:13)
at org.openide.awt.AlwaysEnabledAction$1.run(AlwaysEnabledAction.java:139)
at org.netbeans.modules.openide.util.ActionsBridge.implPerformAction(ActionsBridge.java:83)
at org.netbeans.modules.openide.util.ActionsBridge.doPerformAction(ActionsBridge.java:67)
at org.openide.awt.AlwaysEnabledAction.actionPerformed(AlwaysEnabledAction.java:142)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:389)
at com.apple.laf.ScreenMenuItem.actionPerformed(ScreenMenuItem.java:95)
at java.awt.MenuItem.processActionEvent(MenuItem.java:627)
at java.awt.MenuItem.processEvent(MenuItem.java:586)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:317)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:305)
[catch] at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:125)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Ich verstehe, dass beanutils die Commons-Logging-Komponente verwendet.Ich habe versucht, die Commons-Logging-Komponente auf zwei verschiedene Arten hinzuzufügen (Erstellen einer Wrapper-Bibliothek um die Commons-Logging-Bibliothek und Abhängigkeit von der Commons-Logging-Integrationsbibliothek).
Beides löst das Problem nicht.
Mir ist aufgefallen, dass das gleiche Problem bei anderen umschlossenen Bibliotheken auftritt;wenn sie selbst externe Abhängigkeiten haben, verbreiten sich die ClassNotFoundExceptions wie verrückt, selbst wenn ich die Jars der benötigten Bibliotheken verpackt und als Abhängigkeiten zum ursprünglich umschlossenen Bibliotheksmodul hinzugefügt habe.
Bildhaft:
alternativer Text http://files.droplr.com/files/18876491/IwG2.NetBeans%20Project%20problem.png
Ich bin hier mit meinem Latein am Ende.Beim Googeln sind mir ähnliche Probleme aufgefallen:
Gibt es einen bekannten Fehler in der Abhängigkeit von NB-Modulen
Das gleiche Problem, mit dem ich konfrontiert bin, aber beim Einwickeln eines anderen Glases
NetBeans Haltung dazu - keine der 3 trifft auf mich zu.
Keiner hilft mir schlüssig.
Danke,
Nick
BEARBEITEN:Ich habe es geschafft, das Beispiel mit beanutils zum Kompilieren zu bringen, indem ich dem Beanutils-Bibliotheks-Wrapper Abhängigkeiten zu Commons-logging und commons-collections hinzugefügt habe.Aber mein Problem bleibt in anderen Fällen.
Lösung
Ich habe die Gläser neu aufgebaut, sie neu verpackt und dadurch die ClassPathNotFound Ausnahmen behoben.
Andere Tipps
Caused: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.PropertyUtilsBean.<init>(PropertyUtilsBean.java:132)
Dieser Fehler deutet im Grunde darauf hin, dass die Commons -Protokollierung im selben Klassenpfad wie Beanutils sein muss. Ich bin mir nicht sicher, was Sie beim Erstellen eines Wrapper -Moduls meinen und warum Sie es gerne tun möchten, aber normalerweise lassen Sie die Bibliotheken (die JAR Um die JAR -Dateien manuell zum BuildPath des Projekts hinzuzufügen.