Eclipse 更改项目文件位置
Posted
技术标签:
【中文标题】Eclipse 更改项目文件位置【英文标题】:Eclipse change project files location 【发布时间】:2010-11-28 16:27:51 【问题描述】:我有一个 Eclipse 项目 (Flex Builder),其中的实际文件已更改驱动器上的位置。当我启动 Eclipse 时,我可以看到列出的项目,但没有列出实际文件。右键单击项目并选择属性将显示用于存储文件的旧路径,但我无法更改它。
如何更改 Eclipse 项目的文件位置,在项目创建后它将在其中查找文件?
【问题讨论】:
查看此问题的公认答案:***.com/questions/3479466/… 【参考方案1】:您可以将.classpath
和.project
文件复制到新项目目录的根目录,然后从文件菜单中选择“导入...”,然后选择“常规/现有项目到工作区”。在出现的对话框中,找到新项目目录的根目录并完成。确保在导入之前已从工作空间中删除旧项目。
【讨论】:
如果你在同一个工作空间中导入你重新定位的项目,你必须先删除旧项目,否则 Eclipse 不会让你继续导入。 即从工作区中删除旧项目(不是从磁盘中删除!) 我正在这样做,它发现我的项目很好。但是,单击“完成”(闪烁,好像它已准备好让我做某事)并没有做任何事情。对话框保持不变;没有错误信息。还有什么需要做的吗? 太复杂了...只需右键单击项目 -> 重构 -> 移动。 @Menefee 我相信您的方法仅适用于文件尚未更改位置的情况(因为 Refactor > Move 将移动实际的项目文件)。 OP 想要的是更新对已更改位置的文件的引用。因此,在这种情况下,Eclipse 似乎仍然没有提供比公认答案更简单的解决方案。【参考方案2】:更简单:右键单击 -> 重构 -> 移动。
【讨论】:
因为在这种情况下越简单越好。 @Luke 请接受!它更流行。运行良好且无缝! 确实是更好的答案 ;-) 右键也没有“refractor”,但是在“Sript Explorer”中我可以在“refractor”菜单中找到它,但是“Move..”是灰色的。 :'( 使用“包资源管理器”视图而不是“项目资源管理器”视图来获取重构命令。【参考方案3】:此链接显示如何编辑 eclipse 工作区元数据以手动更新项目的位置,如果位置已更改或您有很多项目要移动并且不想多次单击并等待每个项目,这很有用: https://web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/2008/11/moving-a-fb-workspace-update.html
【讨论】:
链接已失效。这是一个缓存版本:web.archive.org/web/20160421171614/http://www.joeflash.ca/blog/… @11101101b 感谢您的更新。我已经更改了原始线程中的链接【参考方案4】:现在有一个插件(自 2012 年底以来)可以解决这个问题:GitHub 上的gensth/ProjectLocationUpdater。
【讨论】:
这个插件完美运行!当您在磁盘上移动东西时,这很有帮助:) ProjectLocationUpdater 就像一个魅力。之前我们只需要完成一个额外的步骤:因为我们要移动到没有相同磁盘布局的不同计算机,我们必须移动到另一个驱动器+位置(从 D: 到 C:\dev):我们必须挂载旧文件夹位置让 eclipse 使用 subst D: C:\dev 查找旧文件。 (在 Linux/Max 上,符号链接就可以了)【参考方案5】:如果您将项目保存为存储库的本地副本,最好从 git 导入。选择本地,然后浏览到您的 git 存储库文件夹。这对我来说比将其作为现有项目导入更好。尝试后者并没有让我“完成”。
【讨论】:
【参考方案6】:我移动了我的默认 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:”+ 【参考方案7】:使用 Neon - 我也遇到过。您必须在 Project Explorer 中删除 Eclipse 版本(而不是从磁盘中)并将项目作为现有项目导入。当然,请确保项目文件夹作为一个整体已被移动,并且 Eclipse 元文件仍然存在,如 @koenpeters 所述。
重构不处理这个。
【讨论】:
以上是关于Eclipse 更改项目文件位置的主要内容,如果未能解决你的问题,请参考以下文章