Eclipse:如何将项目源文件和ant build.xml与Eclipse工作区分开?

9

我正在尝试重新熟悉Eclipse环境和ant集成。

问题是:如何将我的源目录+build.xml与工作区分开?

我有一个小的Java项目和其build.xml文件,所有源代码都放在一个单独的项目文件夹下。然后我启动了Eclipse,并让它通过“从现有Ant构建文件创建Java项目”导入我的项目。

一切都很顺利,直到我想从Eclipse内部使用build.xml构建项目时。Ant开始抱怨找不到源树。经过我检查工作区后,发现Eclipse已经将build.xml复制到工作区中,因此显然Ant无法在那里找到任何源代码。如果可能的话,它们仍然在我的项目目录下,我希望保持它们在那里。

所以,如何使此设置起作用的最佳方法是什么?工作区在一边,我的项目在另一边?

谢谢!

编辑:我想要的东西甚至可能吗?


你为什么想要把它们分开?有什么特定的原因吗? - atrain
也许你可以指定执行构建脚本的目录,这样即使它被复制到新位置,你也可以运行它。同时也可以看看其他建议。 - Danail Nachev
因为Netbeans可以做到 ;) - Leif Gruenwoldt
你可以使用Eclipse IDE完全按照自己的意愿(将项目和工作空间文件夹分开)进行操作。请按照以下步骤进行操作:
  1. 创建新的Java项目。
  2. 导入 >> 文件系统 >> 选择项目文件夹(buid.xml文件)。
  3. 单击高级选项(选择在工作空间中创建链接)屏幕截图。 这将在您的工作空间中创建到实际项目的链接。
- M Faisal Hameed
5个回答

11

不要使用“从现有Ant Buildfile创建Java项目”,而是创建一个简单的“Java项目”。在向导中取消选中“使用默认位置”,并输入现有项目的顶级目录的路径(或浏览)。确实,如果这些文件不存在,eclipse将在项目目录中创建.project和.classpath文件,但该项目将保留在eclipse工作区之外。

例如,在独立系统的非常特定情况下,此设置已经非常成功地运行,在该系统中,源树位于公共位置,但每个用户都拥有受保护位置的工作区。使用上述方法,该系统的每个用户都可以在自己的eclipse工作区中创建项目,执行Ant目标,然后从自己的工作区中删除项目,而不影响其他用户的工作区。


当我在Eclipse中指向现有项目的位置时,它会说目录已被使用,即使它不是一个Eclipse项目,它只是一个普通的ant项目。我使用的是Helios 3.6.2。 - Leif Gruenwoldt
我无法在OS X上使用Helios 3.6.2或Indigo 3.7重现这个特定的错误。我曾经遇到过与eclipse类似的冲突错误,那是因为我尝试使用已经在使用中的工作区,或者至少看起来是这样(陈旧的工作区元数据可能会导致这种情况)。然而,在尝试复制此错误时,我发现我实际上可以使用两个同时运行的eclipse实例,使用两个不同的工作区,并且都指向一个共同的项目目录,而没有任何问题。 - aliasmrchips

2

2
这是一个不错的想法。谢谢。我猜我的担忧,即尽可能将项目和工作区分开来,实际上在外面并不是问题,因为我在这个主题上找不到太多信息。似乎每个人都很高兴将它们混合在一个单一的目录下。但从概念上讲,我认为IDE工作区和项目本身应该有所区别。项目不应该与IDE有任何紧密联系。也许我只是在胡言乱语... - simou

1

我在C++项目中经常这样做(没有Java,抱歉,但我认为这个概念是可移植的)。

我的工作区在~/workspaces/{workspace_name}。我在~/{my_projects}中有一个单独的共享项目文件,然后源代码树(多个版本)在~/proj1、~/proj2等中。

在每个~/proj*目录中,我都会放置一个指向~/my_projects/.project和.cproject的符号链接(对于C++是必需的,在Java中不使用)。因此,每个源代码树都共享单个项目文件。然后在每个工作区(每个源代码树一个),我通过导入项目链接来配置工作区。例如,~/workspaces/proj1导入~/proj1/.project,但~/proj1/.project实际上是指向~/my_projects/.project的符号链接。

因此,这将源代码与工作区分开。构建时,没有真正的配置要做——我只需要让Eclipse在树的适当节点中运行make即可——我们已经拥有自己的面向命令的构建系统(我们不使用ant,但同样的原则应该适用)。

我在SCM的私有区域中源控制~/my_projects文件夹,这样其他团队成员就看不到它或者干扰它了——他们中的许多人根本不使用Eclipse。


0

其实没有必要去避免使用相同的源文件集来编译Ant和Eclipse。实际上,它们使用相同的源文件集可能更好。

请记住,实际上你并没有混合任何东西。只有一个源文件集,然后有两种不同的构建方式:Ant和Eclipse。这些构建器是相互独立的,因此与Eclipse耦合没有问题。你甚至可以愉快地将所有Eclipse文件(.classpath、.project、.settings)提交到源代码控制中心,而不影响使用其他IDE的开发人员。


当我还在使用E进行开发时,工作空间经常会出现损坏,由于源文件在工作空间之外的不同位置,我能够轻松地删除损坏的工作空间并用新的工作空间替换它,而不影响项目本身。我可能错了,但我当时使用的build.xml始终与项目本身位于一起,而不是工作空间下面。我认为我使用Eclipse进行增量构建,但对于部署、数据库设置和单元测试,我经常使用Eclipse中ant视图中的build.xml目标。可惜我忘记如何做了。 - simou
2
提交IDE项目文件是一个不好的主意。根据我的经验,它们包含用户特定的主目录路径,因此在开发人员之间不可重用。 - Leif Gruenwoldt
@leif81 不好的想法是将用户特定信息放入项目配置中,这也是不必要的。我不能代表其他IDE说话,但Eclipse提供了功能,允许您的配置文件包含占位符,然后可以由每个开发人员在其工作区中指定。例如:类路径变量、运行/调试字符串替换。 - KevinS
@Kevin,我是在谈论使用Netbeans的经验,也许Eclipse处理得更好。 - Leif Gruenwoldt

0

我经常这样做(诚然是使用Maven,而不是Ant),但是相同的原则适用。

如果您在Eclipse中有一个现有项目(带有源树中的.project文件),那么您可以导入项目->导入现有项目。当对话框出现时,您可以选择“将项目复制到工作区”。确保取消选中此选项,然后导入。

您仍然将.project存储在原始源树中,但仅此而已。

所以现在我有

  1. code/xxx(其中包含.java文件,这些文件在SVN中)
  2. code/xxx-workspace(其中包含eclipse工作区)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接