在 Eclipse 中方便地将类移动到不同的包,而无需使用 svn

问题描述 投票:0回答:6

old.package to new.package
移动文件时,我希望发生两件事:

  1. 更新对该类的所有引用(在项目的所有文件中),以便使用新包
  2. svn move old/package/Foo.java new/package/Foo.java

我在 Eclipse Ganymede 中使用 subversive。当我将文件从一个包拖到另一个包时,所有引用都会更新,并且文件会在文件系统上移动。但 SVN 不知道这一点,因此当

svn move old/package/foo.java new/package/Foo.java
不存在时,
old/package/Foo.java
命令不起作用(显然)(因为 Eclipse 已经移动了它)。

有没有办法让 Eclipse 进行重构,但使用 svn 在文件系统上移动文件?我希望我只是错过了一些明显的东西:-)

java eclipse svn move
6个回答
16
投票

我使用Subclipse,它确实支持在包之间移动文件


3
投票

我一直在尝试,并且认为我已经找到了方法:

1) 使用右键单击并拖动上下文菜单(或任何您想要的 SVN 方法)来龟式移动文件。

2)使用Windows文件系统将其移回来。

3) 在 Eclipse 中拖移文件以更新所有引用。

4)提交 - 它显示为删除/添加,但它保存历史记录,并且它确实在一次提交中更改了包引用(保持每个提交可构建)。

老问题,但我不断回到它,所以这是我的文档!


1
投票

尤瓦尔是对的。这听起来像是 Subversive 的一个(非常不幸!)缺陷。 (没有使用 Subversive 的经验,我不能肯定地说)Subclipse 肯定可以通过挂接到 Eclipse 中正确的 API 来正确处理这个问题。


0
投票

您不能同时执行这两项操作,因为单独移动文件是不够的。需要修改这些文件才能使您的代码再次可编译。因此,使用 Eclipse 进行重构,并让 Subclipse 在移动后发挥其魔力(删除旧文件,添加新文件)。


0
投票

这已经很旧了,但仍然是一个问题。我使用重构将与 servlet 关联的类移动到新包中。然后打开 web.xml,找到 servlet 并将新的包名称添加到标记中。我将 GetArticle servlet 从默认包移至 api 包:

 <servlet>
    <description></description>
    <display-name>GetArticles</display-name>
    <servlet-name>GetArticles</servlet-name>
    <servlet-class>api.GetArticles</servlet-class>
 </servlet>

-1
投票

如果您让 Eclipse 进行重构,那么它肯定会对提交根目录时 SVN 应拾取的实际文件进行更改吗?我不认为此举会消除它,SVN 将不得不发现该文件从其原始目录中丢失,但从新目录中重新添加它。这是一个棘手的情况,我不知道最好的方法是什么,我只是进行重构,然后亲自提交根,即使这不是一个举动。

© www.soinside.com 2019 - 2024. All rights reserved.