Плагин Eclipse не загружает DLL из-за длинного пути - PullRequest
0 голосов
/ 02 июня 2009

Я строю плагин Eclipse (плагин для заметок, но в конце концов это плагин Eclipse). Один из плагинов, мой плагин, зависит от необходимости загрузки нативной библиотеки DLL.

Проблема в том, что происходит сбой в зависимости от того, где на диске находится такая dll. Если он превышает определенный порог, я получаю ошибку ниже

java.lang.UnsatisfiedLinkError: nlsxbe (Имя файла или расширение слишком длинное.) в java.lang.ClassLoader.loadLibraryWithPath (ClassLoader.java:952) в java.lang.ClassLoader.loadLibraryWithClassLoader (ClassLoader.java:921) в java.lang.System.loadLibrary (System.java:452) на lotus.domino.NotesThread.load (неизвестный источник) на lotus.domino.NotesThread.checkLoaded (неизвестный источник) на lotus.domino.NotesThread.sinitThread (неизвестный источник) на com.atempo.adam.lotus.plugin.views.TopicView.createPartControl (TopicView.java:609)

Я добавил путь к Path env var, а также зарегистрировал dll безрезультатно. Мой env is Ms vista profesional, java1.5, eclipse3.4 (и lotus 8)

У кого-нибудь есть подсказка?

Большое спасибо заранее.

Ответы [ 3 ]

1 голос
/ 03 июня 2009

Я попытался зарегистрировать dll и переместить его в c: \ windows \ system32 (более короткий путь), но мой плагин Lotus Notes не может загрузить необходимую библиотеку (Notes.jar).

Это работает, только если я устанавливаю Lotus Notes по пути короче, чем «c: \ program files \ IBM \ lotus \ Notes», где работает отлично. Если я устанавливаю его, например, в «c: \ Archivos de programa \ IBM \ lotus \ Notes», он может найти мою DLL, но не может загрузить библиотеку.

Ошибка:

GRAVE Невозможно создать идентификатор представления com.atempo.adam.lotus.plugin.views.TopicView: nlsxbe (слишком длинное имя файла или расширение.) :: class.method = unknown :: thread = main :: loggername = org.eclipse.ui.workbench

java.lang.UnsatisfiedLinkError: nlsxbe (The filename or extension is too long. )
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:952)
at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:921)
at java.lang.System.loadLibrary(System.java:452)
at lotus.domino.NotesThread.load(Unknown Source)
at lotus.domino.NotesThread.checkLoaded(Unknown Source)
at lotus.domino.NotesThread.sinitThread(Unknown Source)
at com.atempo.adam.lotus.plugin.views.TopicView.createPartControl(TopicView.java:639)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:290)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:525)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:140)
at com.ibm.rcp.ui.internal.presentations.FolderStackPresentation.selectPart(FolderStackPresentation.java:692)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1144)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:620)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:532)
at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:562)
at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:244)
at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:815)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3269)
at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:956)
at org.eclipse.ui.internal.WorkbenchPage.access$12(WorkbenchPage.java:940)
at org.eclipse.ui.internal.WorkbenchPage$12.run(WorkbenchPage.java:3368)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3366)
at org.eclipse.ui.internal.Workbench.showPerspective(Workbench.java:2102)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspective(DoInternalUIService.java:981)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspective(DoInternalUIService.java:886)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspectiveWithNavigator(DoInternalUIService.java:863)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.access$12(DoInternalUIService.java:857)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService$8.run(DoInternalUIService.java:1197)
at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155)
at org.eclipse.ui.internal.UISynchronizer$1.run(UISynchronizer.java:36)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3659)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3296)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1931)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1895)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:423)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.ibm.rcp.personality.framework.internal.RCPApplication.run(RCPApplication.java:72)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
at org.eclipse.core.launcher.Main.main(Main.java:30)

Спасибо.

1 голос
/ 24 июня 2009

Это один из симптомов ограничения Windows MAX_PATH. Об этом есть примечания КБ (например, 320081 ) и несколько обсуждений ручных методов для работы с этими файлами, которые вы легко можете найти с помощью Google.

Проблема заключается в том, что Windows имеет ограничение на длину полного пути к файлу , используемого в различных системных вызовах и вызовах командного уровня. Хотя в сообществе пользователей было много дискуссий (и даже некоторых новых вещей, которые можно попробовать в Microsoft KB), все они сводятся к тому, что вы сокращаете путь к файлу, о котором идет речь, честным образом или нечестно.

В эфире есть некоторые признаки того, что API-интерфейсы Microsoft Unicode допускают (до) 32-байтовые пути к файлам, хотя я не знаю, так ли это. Тем не менее, остается фактом, что многие существующие программы не используют эти API и поэтому выходят за этот предел. (Возможно даже, что API-интерфейсы Windows используют UTF16 (или UCS2), и в этом случае это означает только 16 тыс. Символов - кто-нибудь знает об этом?)

Система позволяет вам создавать «недоступные» пути к файлам многими способами - один шаг за шагом создает шаги в пути с помощью навигации; другой способ заключается в монтировании общих ресурсов, и иногда системные функции и утилиты внутренне полагаются на полный путь к файлу для манипулирования, которое выходит за рамки этого ограничения.

Если это основное глупое ограничение не удалено из системного кода Windows, единственным выходом для вас является перемещение и / или переименование файлов…

… или запустите Unix.

1 голос
/ 02 июня 2009

У меня были похожие проблемы, и я должен был просто убедиться, что файлы не находятся в длинных путях.

Существует множество программ, которые, похоже, имеют проблемы с длинными путями, включая некоторые встроенные программы Windows.

У вас есть контроль над тем, где находится эта DLL?

...