Eclipse更改项目文件的位置


72

我有一个Eclipse项目(Flex Builder),其实际文件在驱动器上的位置已更改。当我启动Eclipse时,我可以看到列出的项目,但是没有列出实际的文件。右键单击该项目并选择属性,将向我显示用于存储文件的旧路径,但无法更改。

如何在创建项目后更改Eclipse项目的文件位置?


3
见接受的答案对这个问题:stackoverflow.com/questions/3479466/...
Schmuli

Answers:


75

您可以将.classpath.project文件复制到新项目目录的根目录,然后从文件菜单中选择“导入...”,然后选择“将常规/现有项目导入工作区”。在出现的对话框中,找到新项目目录的根目录并完成。导入之前,请确保已从工作空间中删除了旧项目。


9
如果将重新定位的项目导入同一工作空间,则必须先删除旧项目,否则Eclipse将不允许您继续导入。
让-皮埃尔·施耐德

8
也就是说,从工作区中删除旧项目(而不是从磁盘中!)
Rose Perrone 2012年

我正在这样做,它发现我的项目很好。但是,单击“完成”(闪烁,好像已经准备好执行某项操作一样)没有任何作用。对话框出现;没有错误信息。还有什么需要做的吗?
BeccaP 2013年

6
太复杂了...只需右键单击项目->重构->移动。
Menefee

4
@Menefee我相信您的方法只能在文件尚未更改位置的情况下起作用(因为Refactor> Move将移动实际的项目文件)。OP想要的是更新对已经更改位置的文件的引用。因此,在那种情况下,似乎Eclipse仍然没有提供比接受的答案更简单的解决方案。
TanguyP

33

简单得多:右键单击->重构->移动。


因为在这种情况下,越简单越好。
natedennis

@卢克,请接受!现在比较流行。完美而无缝!
ADTC '16

确实是更好的答案;-)
GhostCat

右键单击时也没有“折射镜”,但是在“ Sript资源管理器”中我可以在“折射镜”菜单中找到它,但是“移动..”显示为灰色。:'(
e-motiv

使用“包资源管理器”视图而不是“项目资源管理器”视图来获取重构命令。
Boann

23

此链接显示了如何编辑Eclipse工作区元数据以手动更新项目的位置,如果位置已经更改或您有许多项目要移动并且不想单击几次并等待每个单击,则很有用: https: //web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/2008/11/moving-a-fb-workspace-update.html


提到的链接已死。这是一个缓存的版本:web.archive.org/web/20160421171614/http
11101101b

@ 11101101b感谢您的更新。我更改了原始线程中的链接
sunil

9

现在有一个插件(自2012年底开始)可以解决此问题:GitHub上的gensth / ProjectLocationUpdater


1
这个插件完美的工作!当您在磁盘上四处移动东西时,这很有帮助:)
SebastianH

ProjectLocationUpdater就像一个魅力。之前,我们仅需完成一个额外的步骤:由于我们要转移到没有相同磁盘布局的另一台计算机上,因此我们不得不转移到另一个驱动器+位置(从D:到C:\ dev):我们必须挂载旧文件夹eclipse使用替代D:C:\ dev的位置。(在Linux / Max上,使用符号链接可以解决问题)
Jidehem

1

如果您将项目另存为资源库的本地副本,则最好从git导入。选择本地,然后浏览到您的git存储库文件夹。这对我来说比将其导入现有项目更好。尝试后者不允许我“完成”。


0

使用霓虹灯-我也刚发生过。您将必须在Project Explorer中删除Eclipse版本(而不是从磁盘中删除),然后将项目作为现有项目导入。当然,请确保整个项目文件夹都已移动,并且Eclipse元文件仍然存在,如@koenpeters所述。

重构无法处理此问题。


0

我移动了默认的git存储库文件夹,因此遇到了同样的问题。我编写了自己的Class来管理日食的位置,并用它来更改位置文件。

        File locationfile 
            = new File("<workspace>"
                    +"/.metadata/.plugins/org.eclipse.core.resources/.projects/"
                    +"<project>/"
                    +".location");

        byte data[] = Files.readAllBytes(locationfile.toPath());

        EclipseLocation eclipseLocation = new EclipseLocation(data);

        eclipseLocation.changeUri("<new path to project>");

        byte newData[] = eclipseLocation.getData();

        Files.write(locationfile.toPath(),newData);

这是我的EclipseLocation类:

public class EclipseLocation {

    private byte[] data;
    private int length;
    private String uri;


    public EclipseLocation(byte[] data) {
        init(data);
    }

    public String getUri() {
        return uri;
    }

    public byte[] getData() {
        return data;
    }


    private void init(byte[] data) {

        this.data = data;   
        this.length = (data[16] * 256) + data[17];
        this.uri = new String(data,18,length);  
    }


    public void changeUri(String newUri) {

        int newLength = newUri.length();
        byte[] newdata = new byte[data.length + newLength - length];        


        int y = 0;
        int x = 0;

        //header
        while(y < 16) newdata[y++] = data[x++];

        //length
        newdata[16] = (byte) (newLength / 256);
        newdata[17] = (byte) (newLength % 256);

        y += 2;
        x += 2;

        //Uri
        for(int i = 0;i < newLength;i++)
        {
            newdata[y++] = (byte) newUri.charAt(i);
        }
        x += length;

        //footer
        while(y < newdata.length) newdata[y++] = data[x++];

        if(y != newdata.length)
            throw new IndexOutOfBoundsException();

        if(x != data.length)
            throw new IndexOutOfBoundsException();

        init(newdata);
    }


}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.