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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top