Eclipse更改项目文件位置

时间:2009-09-16 03:46:15

标签: eclipse

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

如何更改Eclipse项目的文件位置,在项目创建后它将查找文件?

7 个答案:

答案 0 :(得分:73)

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

答案 1 :(得分:31)

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

答案 2 :(得分:22)

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

答案 3 :(得分:9)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

Refactor不处理这个问题。

答案 6 :(得分: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);
    }


}