Eclipse更改项目文件位置

Eclipse更改项目文件位置,eclipse,Eclipse,我有一个Eclipse项目(Flex Builder),其中的实际文件在驱动器上的位置发生了变化。当我启动Eclipse时,我可以看到列出的项目,但没有列出实际的文件。右键单击项目并选择“属性”将向我显示用于存储文件的旧路径,但我无法更改它 如何更改Eclipse项目的文件位置,以便在创建项目后查找文件?您可以将.classpath和.project文件复制到新项目目录的根目录,然后从“文件”菜单中选择“导入…”,然后选择“将常规/现有项目放入工作区”。在生成的对话框中,找到新项目目录的根目录并

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


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

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

此链接显示如何编辑eclipse工作区元数据以手动更新项目的位置,如果位置已更改,或者您有许多项目要移动,并且不想多次单击并等待每一次,此链接将非常有用:

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

现在有一个插件(从2012年底开始)可以解决这个问题:在GitHub上。

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

使用Neon-我也遇到过。您必须在ProjectExplorer中删除Eclipse版本(而不是从磁盘上),并将项目作为现有项目导入。当然,确保项目文件夹作为一个整体被移动,并且Eclipse元文件仍然存在,正如@koenpeters所提到的


重构无法处理此问题。

我移动了默认的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);
文件位置文件
=新文件(“”)
+“/.metadata/.plugins/org.eclipse.core.resources/.projects/”
+"/"
+“.location”);
字节数据[]=Files.readAllBytes(locationfile.toPath());
日食日食=新日食(数据);
日食。变更URI(“”);
字节newData[]=eclipseLocation.getData();
write(locationfile.toPath(),newData);
这是我的日食课:

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);
    }


}
公共类日食{
专用字节[]数据;
私有整数长度;
私有字符串uri;
公共日食(字节[]数据){
init(数据);
}
公共字符串getUri(){
返回uri;
}
公共字节[]getData(){
返回数据;
}
私有void init(字节[]数据){
这个数据=数据;
this.length=(数据[16]*256)+数据[17];
this.uri=新字符串(数据,18,长度);
}
公共void changeUri(字符串newUri){
int newLength=newUri.length();
byte[]newdata=新字节[data.length+newLength-length];
int y=0;
int x=0;
//标题
而(y<16)newdata[y++]=data[x++];
//长度
newdata[16]=(字节)(newLength/256);
newdata[17]=(字节)(newLength%256);
y+=2;
x+=2;
//Uri
for(int i=0;i
如果在同一工作区中导入重新定位的项目,则必须先删除旧项目,否则Eclipse将不允许您继续导入。也就是说,从工作区(而不是从磁盘!)中删除旧项目。我正在这样做,它发现我的项目很好。然而,点击“finish”(它闪烁着,好像我已经准备好做什么了)并没有做任何事情。对话保持不变;没有错误消息。还有什么需要做的吗?太复杂了。。。只需右键单击项目->重构->移动。@Menefee我相信您的方法仅在文件尚未更改位置的情况下有效(因为重构>移动将移动实际的项目文件)。OP想要的是更新对已更改位置的文件的引用。因此,在这种情况下,Eclipse似乎仍然没有提供比公认答案更简单的解决方案。请参阅公认答案以了解这个问题:因为在这种情况下,越简单越好。@Luke请接受这个!它更流行。工程伟大和无缝!确实是更好的答案;-)右键单击也没有“折射器”,但在“Sript资源管理器”中,我可以在“折射器”菜单中找到它,但“移动…”显示为灰色:(使用“package explorer”视图而不是“project explorer”视图来获取重构命令。此插件工作非常完美!当您在磁盘上移动内容时,这会有很大帮助:)ProjectLocationUpdater工作得非常出色。我们之前只需要完成一个额外的步骤:因为我们要移动到不同的计算机,而没有相同的磁盘布局,所以我们必须移动到另一个驱动器+位置(从D:到C:\dev):我们必须装载旧文件夹位置,以便eclipse使用subst D:C:\dev查找旧文件。(在Linux/Max上,符号链接就可以完成这个任务)上面提到的链接已经死了。这里有一个缓存版本:@11101101b谢谢你的更新。我已经更改了原始线程中的链接