2016-09-15 5 views
3

J'ai une nouvelle configuration Emacs (sous Windows) pour un projet Java/Maven de grande taille.company-emacs-eclim utilise un mauvais chemin pour le projet

Installé Eclipse et eclim (spacemacs avec le calque java mis à jour vers la dernière version, company-emacs-eclim installé comme un paquet supplémentaire), mais lorsque company-emacs-eclim essaie d'effectuer la saisie semi-automatique, il utilise le mauvais chemin le dossier du projet deux fois, par exemple

X:/EclipseWorkspace/Project/Project/src/main/com/company/product/Klass.java 

au lieu de

X:/EclipseWorkspace/Project/src/main/com/company/product/Klass.java 

message d'erreur est

Company: An error occurred in auto-begin 
Company: backend company-emacs-eclim error "Could not read from "file:///X:/EclipseWorkspace/Project/Project/src/main/com/company/product/Klass.java" because it is a not a file." with args (candidates this) 

En eclimd, je reçois une exception avec le même message:

ERROR [org.eclim.command.Main] Command failed 
org.apache.commons.vfs.FileSystemException: Could not read from "file:///X:/EclipseWorkspace/Project/Project/src/main/com/company/product/Klass.java" because it is a not a file. 
at org.apache.commons.vfs.provider.AbstractFileObject.getInputStream(AbstractFileObject.java:1109) 
at org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:317) 
at org.eclim.util.file.FileUtils.byteOffsetToCharOffset(FileUtils.java:75) 
at org.eclim.plugin.core.command.AbstractCommand.getOffset(AbstractCommand.java:99) 
at org.eclim.plugin.core.command.AbstractCommand.getOffset(AbstractCommand.java:71) 
at org.eclim.plugin.core.command.complete.AbstractCodeCompleteCommand.execute(AbstractCodeCompleteCommand.java:60) 
at org.eclim.command.Main$1.run(Main.java:100) 
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) 
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4203) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3819) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) 
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) 
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:687) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) 
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1519) 

J'ai essayé la fermeture et rouvrir l'espace de travail, re ouvrir le projet à Emacs, recréer l'ensemble de l'espace de travail, tout donne le même résultat.

+0

Avez-vous déjà réglé ce problème? Je vois la même chose. – glucas

Répondre

1

La réponse courte semble être qu'eclim a un support incomplet pour les projets Maven multi-modules. Voir par exemple https://github.com/ervandew/eclim/issues/499.

Le problème n'est pas lié à company, l'erreur est identique eclim-complete. Ce qui semble se produire est que dans un projet multi-module, eclim--project-current-file est défini sur un chemin relatif à la racine plutôt qu'au projet en cours.

Vous pouvez contourner ce problème en indiquant eclim--current-project-file pour renvoyer le chemin relatif correct. Par exemple:

(defun my-eclim-fix-relative-path (path) 
    (replace-regexp-in-string "^.*src/" "src/" path)) 

(advice-add 'eclim--project-current-file :filter-return #'my-eclim-fix-relative-path) 

Cela peut affecter d'autres comportements Eclim, mais dans mes tests rapide, il fonctionne pour moi quand je travaille sur les fichiers src/main et src/test.

1

avez-vous vérifié le contenu du fichier .classpath à la racine de votre projet? Cela peut contenir des erreurs en quelque sorte. Si vous l'éditez pour pointer vers les bons répertoires, cela peut corriger l'auto-complétion.

+0

.classpath n'est pas cassé, il indique les emplacements relatifs corrects –