Eclipse更改项目文件位置

74

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

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


3
请参考这个问题的被接受回答:https://dev59.com/lXA75IYBdhLWcg3wGU6I - Schmuli
7个回答

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

9
如果您要将已经迁移的项目导入同一个工作区,您需要先删除旧项目,否则Eclipse不会让您继续进行导入操作。 - Jean-Pierre Schnyder
8
即,从工作区中删除旧项目(不要从磁盘中删除!) - Rose Perrone
我尝试从我的git存储库重新导入它,这样就可以了。 - BeccaP
6
太过复杂了……只需右键点击项目 -> 重构 -> 移动。 - Menefee
4
我认为你的方法只适用于文件尚未更改位置的情况(因为重构>移动将移动实际项目文件)。 OP想要的是更新已更改位置的文件的引用。 所以在这种情况下,似乎Eclipse仍然没有提供比已接受答案更简单的解决方案。 - TanguyP
显示剩余2条评论

34

更简单的方法:右键 -> 重构 -> 移动。


因为在这种情况下,简单就是更好的选择。 - natedennis
@Luke 请接受这个!它更加现代化。运行良好且无缝! - ADTC
真的是更好的答案;-) - GhostCat
右键菜单中也没有“重构”,但我可以在“脚本资源管理器”中的“重构”菜单中找到它,但“移动…”选项是灰色的。:'( - e-motiv
请使用"包资源管理器"视图而不是"项目资源管理器"视图来获取重构命令。 - Boann

23

链接已失效。这里是缓存版本:https://web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/2008/11/moving-a-fb-workspace-update.html - 11101101b
@11101101b 感谢您的更新。我已经在原始帖子中更改了链接。 - sunil

11

1
这个插件完美地工作了!当你在磁盘上移动东西时,它非常有帮助 :) - SebastianH
ProjectLocationUpdater 运行得非常好。在此之前,我们只需要完成一个额外的步骤:由于我们要移动到不同的计算机且磁盘布局不同,因此我们必须移动到另一个驱动器+位置(从 D: 移动到 C:\dev):我们必须挂载旧文件夹位置以让 Eclipse 使用 subst D: C:\dev 找到旧文件。(在 Linux/Max 上,符号链接就可以解决问题) - Jidehem
很棒的插件。由于我们的工作区有数百个项目,其中一些通常关闭,因此使用工作集来标记所有打开的项目,然后关闭它们,并选择该工作集中的所有项目以移动它们,然后重新打开所有内容。 - Alain P

1
如果您将项目保存为存储库的本地副本,则最好从git导入。选择本地,然后浏览到git存储库文件夹。对我而言,这比将其导入为现有项目更好。尝试后者无法让我“完成”。

1
我移动了默认的git存储库文件夹,因此遇到了相同的问题。我编写了自己的类来管理eclipse位置,并使用它来更改位置文件。
        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);
    }


}

感谢您提供这个解决方案。这是最佳方法,因为它消除了人为错误的可能性。但是,一个有用的细节需要注意,即“newUri”是:“URI//file:”+<项目新位置的绝对路径>。 - Seva Safris

0

使用Neon - 我也遇到了这个问题。您需要在项目资源管理器中删除Eclipse版本(不是从磁盘中删除),并将项目作为现有项目导入。当然,确保整个项目文件夹已经移动,并且Eclipse元文件仍然存在,如@koenpeters所提到的。

重构无法处理此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接