eclipse - 从 Eclipse 使用 ant 构建的策略

标签 eclipse ant

我们的项目有非常自定义的 ant 构建文件,基本上是这样做的:

  • 一些预编译工作(例如代码生成)
  • 编译Java代码
  • 一些编译后工作(例如,将文件复制到 classes 目录以包含在 jar 文件中;构建 jar 文件;将文件复制到其他地方以便 Tomcat 拾取它们)

  • 目前,我们的 ant 集成包括告诉 Eclipse 运行“do it all”ant 目标(它自己编译)。

    这似乎很可疑,因为 ant 正在编译而不是 Eclipse,并且 Eclipse 编译器会产生更好的错误消息。还不清楚是应该先运行 ant 构建还是默认 Java 构建。当项目中的任何内容发生变化时,我们需要告诉 ant 目标基本上运行。这导致 Ant 在每次保存时都运行整个机器,基本上。这很慢。 (如果我们没有编辑代码生成器的输入文件,那么我们可以跳过运行代码生成器,ant 需要很长时间才能弄清楚它不需要做任何事情。)

    这里有要遵循的策略建议吗?
  • 我们是否需要将 ant builder 拆分为多个 ant builder,每个 ant builder 都有自己的一组监视资源,其中一些在 Java builder 之前运行,其他在 Java builder 之后运行?
  • 我们应该先运行 ant,然后运行 ​​Java builder,还是反之亦然?刷新设置应该是什么?
  • 我们是否要告诉 Eclipse 重建其他人触及的类文件?

  • 感谢您的任何建议。

    最佳答案

    将生成作业委托(delegate)给 Eclipse 的最佳方式是通过 Ant 构建器。 Look here关于如何设置构建器。

    在您的 build.xml文件创建 2 个目标:generate-codecleanup-generated-code .

    然后以这种方式将它们连接到 builder 的 Targets标签:

    Ant Builder Targets configuration

    这将使您的项目能够很好地响应构建事件。

    下一步是让 Eclipse 自动编译生成的源代码。

    为此,在项目的根目录中创建一个名为 generated-src 的目录。 .这个目录应该是空的,你应该把它放在你的源代码控制系统的管理之下。因为会有一些生成代码,所以把 .xxxignore 文件放到这个目录下。

    一次generated-src目录就地,使其成为您项目的源目录(Java Build Path 中的 Source 选项卡)

    Source directory

    最后但并非最不重要的一点是,一旦生成了源代码,您就想启动 Eclipse 的 java 编译器。为此,您需要修改 Refresh Ant builder 的选项卡。

    这是执行此操作的设置:

    Refresh Tab

    当您点击 Specify Resources按钮,确保选择了整个项目目录,如下所示:

    Selected Resources

    这样,当您的项目中的任何内容发生更改时,它会启动 ant 构建器,它可能会或可能不会重新生成源代码,这将导致 java 重新编译。

    最后一张截图。确保 build.xml和基本目录是相对于你在 Builder 的 Main 中的 ${workspace_loc} 的。选项卡,像这里(基本上只使用 Browse Workspace 按钮):

    Builder's Main Tab

    完成后,连接 generate-codecleanup-generated-code到您的build.xml 中的常规目标你会调用命令行构建。这样,Eclipse 和您的命令行构建执行的代码生成步骤完全相同。此外,您的 Eclipse 构建将对 完全敏感。真实 你的项目的来源。

    关于eclipse - 从 Eclipse 使用 ant 构建的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828321/

    相关文章:

    java - 错误: threadid=1: thread exiting with uncaught exception (group=0xb60734f0)

    java - 带有 Eclipse 错误 "Path must include project and resource name"的 Maven

    使用 Tomcat8 eclipse Neon Web 项目;无法在 ubuntu 16.04 上启动服务器

    ant - <zipfileset> vs. <fileset> in ant

    list - Ant 中使用列表的并行作业

    ant - JUnit Ant任务报告可以忽略测试吗?

    ant - schemagen ant 任务忽略 package-info.java

    java - 如何使用 ant 脚本只将它自己的类添加到没有子包的 jar 文件中?

    Java Eclipse Helios 2 发布 Java SE 7 支持

    eclipse - 通过 Eclipse 在 Perforce 中对文件进行小的本地编辑的正确方法是什么?