Eclipse 更改项目文件位置

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

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

116683 次浏览

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

这个链接展示了如何编辑 Eclipse 工作区元数据来手动更新项目的位置,如果位置已经改变或者你有很多项目要移动,不想多次点击并等待每一次点击,这个链接就很有用: Https://web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/2008/11/moving-a-fb-workspace-update.html

如果将项目保存为存储库的本地副本,那么最好从 git 导入。选择 local,然后浏览到 git 存储库文件夹。这对我来说比把它作为一个现有的项目导入要好。尝试后者并没有让我“完成”。

现在有一个插件(从2012年底开始)可以处理这个问题: GitHub 上的 Gensb/ProjectLocationUpdater

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

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

重构不处理这个问题。

我移动了默认的 git 存储库文件夹,因此遇到了同样的问题。我编写了自己的 Class 来管理 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);
}




}