2009-06-02 7 views
0

Je construis un plugin eclipse (un plugin de notes, mais c'est un plugin eclipse au final). L'un des plugins dont dépend mon plugin a besoin de charger une DLL native.Le plugin eclipse ne charge pas dll en raison du long chemin

Le problème est, qui échoue en fonction de l'emplacement du disque dans cette DLL. Si elle est plus longue d'un certain seuil, je reçois l'erreur ci-dessous

java.lang.UnsatisfiedLinkError: nlsxbe (. Le nom de fichier ou d'extension est trop long) à 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 (Source inconnue) à lotus.domino .NotesThread.checkLoaded (Source inconnue) à lotus.domino.NotesThread.sinitThread (Source inconnue) à com.atempo.adam.lotus.plugin.views.TopicView.createPartControl (TopicView.java:609)

J'ai ajouté le chemin vers le chemin env var, et j'ai également enregistré la DLL en vain. Mon env est Ms vista profesional, java1.5, eclipse3.4 (et lotus 8)

Quelqu'un là-bas ont une idée?

Merci beaucoup à l'avance.

Répondre

1

J'ai eu des problèmes similaires et j'ai dû m'assurer que les fichiers ne sont pas dans de longs chemins.

Il existe de nombreux programmes qui semblent avoir des problèmes avec les longs chemins, y compris certains des programmes Windows intégrés.

Avez-vous le contrôle sur l'emplacement de cette DLL?

-2

Yuck. Here is a discussion sur ce problème.

Maintenant que j'ai été utile, laissez-moi réprimander l'auteur du plugin d'origine pour faire un plugin eclipse qui dépend d'une DLL, et vous par extension pour dépendant de ce plugin. Qu'est-ce que c'est? 1993?

1

J'ai essayé d'enregistrer la DLL et de la déplacer vers c: \ windows \ system32 (un chemin plus court), mais mon plugin Lotus Notes ne peut pas charger la bibliothèque nécessaire (Notes.jar).

Cela ne fonctionne que si j'installe Lotus Notes dans un chemin plus court que "c: \ program files \ IBM \ lotus \ Notes" où fonctionne parfaitement. Si je l'installe dans, par exemple, "c: \ Archivos de programa \ IBM \ lotus \ Notes" il peut trouver ma DLL mais ne peut pas charger la bibliothèque.

L'erreur est:

GRAVE Impossible de créer vue ID com.atempo.adam.lotus.plugin.views.TopicView: nlsxbe (Le nom de fichier ou d'extension est trop long.) :: class.method = inconnu :: 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) 

Merci.

1

Ceci est l'un des symptômes de la limitation Windows MAX_PATH. Il y a des notes de KB à ce sujet (par exemple 320081) et plusieurs discussions de méthodes manuelles pour faire face à ces fichiers que vous pouvez facilement trouver en utilisant Google.

Le problème est que Windows a une limitation sur la longueur d'un chemin de fichier complet utilisé dans divers appels système et de niveau commande. Bien qu'il y ait eu beaucoup de discussions de la part de la communauté des utilisateurs (et même quelques nouveautés à essayer dans la base de connaissances Microsoft), elles se résument toutes à raccourcir le chemin du fichier en question par des moyens honnêtes ou injustes.

Il existe une indication dans l'éther que les API Unicode de Microsoft autorisent (jusqu'à) des chemins de fichier de 32 ko, bien que je ne sache pas si cela est vrai. Cependant, il reste que de nombreux programmes existants n'utilisent pas ces API et tombent donc dans cette limite. (Il est même possible que les API Windows utilisent UTF16 (ou UCS2), auquel cas cela signifie seulement 16k caractères? Est-ce que quelqu'un sait cela?)

Le système vous permet de créer des chemins de fichiers 'inaccessibles' par de nombreuses méthodes -one crée de manière incrémentielle les étapes du chemin par navigation; une autre consiste à monter des partages - et parfois les fonctions et les utilitaires du système s'appuient en interne sur un chemin de fichier complet pour la manipulation qui tombe sur cette limitation.

A moins que cette limitation stupide de base est retiré du code du système Windows, le seul recours est pour vous déplacer et/ou renommer les fichiers ...

... ou exécuter un Unix.

Questions connexes