우선이 질문은 NetBeans 프로젝트를 개발할 때 NetBeans IDE에서 프로그래밍하는 것과 관련이 없습니다 (예 : NetBeans 플랫폼 프레임 워크 사용).Netbeans 플랫폼 프로젝트 - 종속성이있는 랩된 jar 파일의 문제점
BeanUtils 라이브러리를 사용하여 내 도메인 모델을 검사하고 속성 시트에 표시 할 속성을 제공하려고합니다. 샘플 코드 : 나는 평민 - beanutils-1.8.3.jar 래퍼 모듈을 생성하고, 위의 코드를 포함하는 내 모듈의 모듈에 대한 종속성을 추가 한
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;
}
. 모든 것이 잘 컴파일됩니다. 내가 속성 시트보기 (즉 .. 위의 코드가 실제로 실행됩니다), 나는 다음과 같은 오류 얻을 프로그램을 실행하고 열려고하면 :
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 [email protected][org.apache.commons.beanutils] with possible defining loaders [[email protected][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)
을 나는 beanutils은 평민 로깅 구성 요소를 사용하고 있음을 이해합니다. 필자는 두 가지 다른 방법으로 commons-logging 구성 요소를 추가하려고 시도했습니다. (commons-logging 라이브러리 주위에 래퍼 라이브러리를 만들고 Commons Logging Integration 라이브러리에 종속성을 두었습니다.)
어느 쪽도 문제를 해결하지 못합니다.
다른 랩 라이브러리에서 같은 문제가 발생하는 것으로 나타났습니다. 그들 자신이 외부 의존성을 가지고 있다면 ClassNotFoundExceptions은 내가 필요로하는 라이브러리의 jar를 래핑하고 그것들을 원래의 wrapped 라이브러리 모듈에 의존성으로 추가했다 할지라도 미친 듯이 전파됩니다.
그림으로 내 기지에서
alt text http://files.droplr.com/files/18876491/IwG2.NetBeans%20Project%20problem.png
난 여기에 끝납니다.
Is there a known bug on NB Module dependency
Same issue I'm facing but when wrapping a different jar
NetBeans stance on this - none of the 3 apply to me.
없음 결정적으로 저를 도울 : 인터넷 검색을하는 동안 나는 비슷한 문제를 발견.
는닉에게,
EDIT 감사 : 나는 beanutils 라이브러리 래퍼로 평민 로깅과 평민 - 컬렉션에 대한 종속성을 추가하여 컴파일 beanutils와 예제를 얻을 수 있었다. 하지만 내 문제는 다른 경우에도 그대로 남아 있습니다.
Netbeans 플랫폼에서는 원시 jar를 포함하지 않습니다. jar를 래핑하는 Module을 생성해야합니다. – I82Much