Java 将Ant builder集成到Eclipse中:刷新范围工作集的相对路径

Java 将Ant builder集成到Eclipse中:刷新范围工作集的相对路径,java,eclipse,ant,Java,Eclipse,Ant,这个问题类似于,但要求的是不同的东西 在我的EclipseJDT项目中,我想在编译之前执行一些ant任务,所以我在EclipseBuilder配置中添加了一个ant构建器。现在我想为这个构建器配置两个选项“完成后刷新资源”和“相关资源的工作集”,以便它们在我的项目中包含一个特定的目录 两者都允许我用它指定一个“工作集”。问题是,这将在EclipseBuilder配置文件中放置与工作区相关的路径,因此这些路径将包括项目名称 问题是整个项目都在subversion存储库中管理。Eclipse配置是存

这个问题类似于,但要求的是不同的东西

在我的EclipseJDT项目中,我想在编译之前执行一些ant任务,所以我在EclipseBuilder配置中添加了一个ant构建器。现在我想为这个构建器配置两个选项“完成后刷新资源”和“相关资源的工作集”,以便它们在我的项目中包含一个特定的目录

两者都允许我用它指定一个“工作集”。问题是,这将在EclipseBuilder配置文件中放置与工作区相关的路径,因此这些路径将包括项目名称

问题是整个项目都在subversion存储库中管理。Eclipse配置是存储库的一部分,其他用户使用不同的文件系统布局和可能不同的Eclipse项目名称来检查这一点。例如,我的Eclipse工作区中通常有同一项目的多个工作副本,当然每个副本都有不同的项目名称

这就是为什么我在寻找一种方法如何在Eclipse中相对于项目目录指定一个工作集(而不是工作区目录),或者以其他方式定义构建器的刷新范围,从而在我的项目中包含一个目录

我正在使用Eclipse3.7(Indigo)

如果我在对话框中配置工作集,然后查看配置文件,则以下字符串是
ATTR\u REFRESH\u SCOPE
选项的值:

${working_set:
<?xml version="1.0" encoding="UTF-8"?>

<resources>

<item path="/MyProject" type="4"/>

</resources>}
经过消毒,看起来像:

${working_set:
  <?xml version="1.0" encoding="UTF-8"?>
  <resources><item path="/MyProject/lib" type="2"/></resources>
}
${工作集:
}
所以我想从中得到“我的项目”部分。我尝试了上述问题的解决方案,并将路径替换为
${build\u project:/lib}
。这不会给出错误消息,但似乎没有任何效果(Eclipse不会刷新提到的目录)

我还尝试用
${build\u project:/lib}
替换整个工作集定义,但这会给出一条错误消息
无法还原资源memento


我知道我可以告诉Eclipse在构建器运行后刷新整个项目,但这不是我想要的(它非常慢)。同样对于“相关资源”配置选项,这意味着构建器在项目中的每次更改后都会不必要地运行。

不幸的是,Eclipse不适合使用相对目录

但是,您可以执行以下操作:

  • 创建一个新的工作区
  • 从所有计算机上相同的已知位置导入文件
  • 配置该已知目录中的所有内容
  • 向其他开发人员提供工作区和安装说明,以便他们使用相同的“已知目录”
你可以吃点像这样的东西

C:\YourKnownDir\
    \workspace\
    \src\
    \build\
并使用批处理文件启动eclipse:

start %ECLIPSE_DIR%\eclipse.exe -data .\workspace
如果要将.project文件包括在SVN中,那么应该有一个预先确定的完整路径。例如:

C:\svn

希望这会有所帮助,但我不知道有什么其他方法可以解决这个问题。

在存储库中添加一个文件夹级别如何?让我们将项目添加到存储库中的一个文件夹中。因此,无论何时签出项目,它都会创建一个具有项目名称的文件夹。
当前,如果您签出文件夹workspace1中的项目。它一定看起来像:

workspace_1\lib
如果您在repo中添加一个文件夹级别,即项目名称(例如此处的
MyProject
),则签出项目的每个人都将获得相同的项目名称。项目的多个副本如下所示

workspace_1\MyProject\lib
workspace_2\MyProject\lib

通过这种方式,您可以始终使用相同的项目名称创建项目的多个副本,并且您的脚本可以始终利用项目名称的唯一性。

完全不同的方法:

我认为共享Eclipse配置文件(即提交给SVN的配置文件)的局限性相当大;有些人喜欢将依赖库作为磁盘上的源代码,另一些人喜欢JAR引用;每个用户的项目名称和工作空间相对位置都不同,以此类推。正如您所看到的,很多选项都是相对于项目位置(即不能引用其他项目)或工作区位置的

因为我通常都有Maven构建文件,所以我使用Maven eclipse插件从中生成eclipse配置文件。在运行时有几个选项可供选择,几乎所有内容都可以在构建文件中进行自定义(如果没有,只需将插件插入到该插件中即可,并随构建一起提供。Maven将在需要时为使用该插件的用户自动构建该插件)。插件之间还共享一些更抽象的设置,因此如果有人坚持使用Netbeans而不是Eclipse,他至少会得到一个基本配置的项目(依赖项、JRE版本、字符集等),而我从来没有使用过甚至配置过Netbeans

积极的副作用:当添加或更新库依赖项时,只需要更新一个位置(Maven POM),其余位置可以轻松地重新生成


我确信这不是每个人的方法(特别是如果您不仅将Eclipse用于开发,而且还用于构建最终的工件,那么使用另一个构建系统可能看起来有些过分)。

在类似的情况下,我选择刷新“包含所选资源的项目”(正如您已经说过的,它不依赖于项目的名称)并用“派生资源”标记尽可能多的文件夹(文件夹属性->资源->复选框“派生”).Eclipse将刷新派生资源,但不会尝试验证/重建/等。

不幸的是,这对我来说是不可能的。我确实需要相对于项目目录的路径,而不是相对于工作区的路径,例如,在我的工作区中启用同一项目的多个实例。此外,其他一切都会给oth带来很大不便呃开发者,他们不是