我有一个Eclipse项目(Flex Builder),实际文件已经更改了位置。当我启动Eclipse时,我可以看到项目列表,但没有实际的文件列出来。右键单击项目并选择属性将显示旧路径,其中文件曾经存储过,但我无法更改它。
在创建项目后,如何更改Eclipse项目的文件位置,以便它能够查找文件?
我有一个Eclipse项目(Flex Builder),实际文件已经更改了位置。当我启动Eclipse时,我可以看到项目列表,但没有实际的文件列出来。右键单击项目并选择属性将显示旧路径,其中文件曾经存储过,但我无法更改它。
在创建项目后,如何更改Eclipse项目的文件位置,以便它能够查找文件?
.classpath
和 .project
文件复制到新项目目录的根目录下,然后从文件菜单中选择“导入...”,并选择“一般/现有项目到工作区”。在弹出的对话框中,定位新项目目录的根目录并完成。在导入之前,请确保已从工作空间中删除旧项目。更简单的方法:右键 -> 重构 -> 移动。
本链接展示了如何编辑Eclipse工作区元数据以手动更新项目的位置,这对于位置已经改变或您有很多需要移动的项目并且不想为每个项目执行几次点击和等待操作时非常有用:
https://web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/2008/11/moving-a-fb-workspace-update.html现在有一个插件(自2012年底以来)可以处理此问题:GitHub上的gensth/ProjectLocationUpdater。
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);
}
}
使用Neon - 我也遇到了这个问题。您需要在项目资源管理器中删除Eclipse版本(不是从磁盘中删除),并将项目作为现有项目导入。当然,确保整个项目文件夹已经移动,并且Eclipse元文件仍然存在,如@koenpeters所提到的。
重构无法处理此问题。