【问题标题】:Keeping Eclipse project dependencies in sync with an external build system使 Eclipse 项目依赖项与外部构建系统保持同步
【发布时间】:2012-02-03 13:26:52
【问题描述】:

情况是这样的。一个开发团队拥有大量(数百个)Eclipse 项目。代码大量流失——正在创建新项目;项目正在被重命名,项目依赖关系也在不断变化。外部构建系统是 ant。事实证明,让 ant 构建文件中定义的依赖关系与 Eclipse 中的世界状态保持同步是极具挑战性的。外部 ant 构建需要不断变化才能跟上。由于各种原因,不能选择使用 ant 作为 Eclipse 中的默认构建器。开发人员希望继续使用 Eclipse 作为本地使用的构建和编辑环境。

问题:是否有一种工具可以维护一组依赖项,Eclipse 以及像 ant 这样的外部构建系统都可以使用这些依赖项? 我听说过 Gradle,但以前从未使用过。在这种情况下有意义吗?我很确定 Maven 不能满足需要 典型的工作流程应该是:
1. 开发人员继续像现在一样工作——随意创建和更改Eclipse项目依赖项,并使用默认的Eclipse builder在本地编译和测试。
2. 存在一些机制,通过这些机制可以将这些依赖项带入像 ant 这样的外部构建系统,并在每次签入时触发外部持续构建。
感谢您的反馈 - 谢谢!

【问题讨论】:

  • 为什么 maven 不能工作?与 M2E(目前在 Indigo 中)的关系中,这确实有效……如果您想使用 Maven、Gradle 或 Ant 等构建系统,则必须在构建系统中而不是在构建系统中完成对配置/依赖项等的更改Eclipse...主导系统是构建系统,而不是 IDE...开发人员必须了解 Eclipse 不是构建系统,它只是一个工作环境,而不是构建系统。
  • 感谢 M2E 参考 - 我会看看。不切换到作为主导系统的构建系统的主要原因是历史原因 - 工作开始时不存在外部构建系统,只是最近才引入。将它不显眼地集成到开发人员已经习惯的工作流程中会很好。假设确实咬紧牙关,让构建系统成为主导系统,是否有一种自动化的方法可以将现有的 Eclipse 项目依赖项吸出到 Maven/Gradle 甚至 Ant 中?

标签: eclipse build gradle


【解决方案1】:

我们在使用 Gradle 解决类似问题方面非常成功。这是设置的概要

  • 每个项目都包含一个build.gradle,它定义了项目特定的依赖项和任务(甚至可能为空)。
  • 一个特殊的master 项目包含build.gradle,它为子项目设置公共依赖项和任务,和/或注入与一组子项目相关的设置。
    • 从逻辑上讲,master 项目是 项目,但它作为同级文件夹存在,因此 Eclipse 可以更适应它。
  • Gradle 包含一个内置的 Eclipse 插件,它允许根据依赖关系信息(包括项目间依赖关系)为每个项目生成 Eclipse 设置文件。它适用于简单的项目,对于更复杂的项目,Gradle 允许您修改设置文件,因此您几乎可以做任何事情。从这里你有两个选择:
    • 不要将 Eclipse 设置文件存储在存储库中,并在每次重新签出时调用生成任务(我更喜欢这个选项)。
    • 告诉 Gradle 使用自定义变量使其生成可以签入到存储库的通用设置文件。然后,您只需在依赖项或其他配置发生更改时运行生成任务。
  • (可选)这有点棘手,但您可以让 Gradle 解析现有项目 ivy.xml 文件并从那里设置依赖项。我在这方面取得了一些成功,但我建议将依赖项转换为 Gradle 格式以获得更大的灵活性。
  • 持续构建系统与 Gradle 很好地集成(与 ant 相同)。如果您使用的是 Jenkins (Hudson),则有一个 Gradle 插件。

使用 Gradle 的优势在于它可以很好地扩展,并且您可以同时支持其他 IDE,例如 IntelliJ 或 Netbeans,而无需付出太多努力(除非您有很多疯狂的自定义设置)。优点和缺点是 Gradle 是一个强大的构建系统,需要学习 Groovy 和 Gradle DSL,这可能需要一些时间才能掌握。文档也很棒。

Gradle 有一个非常活跃的社区,其唯一目的就是解决这类问题。

希望这会有所帮助,祝你好运!

【讨论】:

  • 感谢@rodion - 决定试一试 grails。感谢您提供有用的信息。完成调查后,我将更新此主题
【解决方案2】:

如何解析 .classpath 文件,生成依赖树并从根开始构建。您需要的是项目布局的约定或可以在每个项目中更改的通用(ant-)构建文件,如果需要(例如不同的项目布局)。我不确定是否可以使用 Eclipse Tycho,因为它是一个用于构建 Eclipse 插件或项目的 Maven 插件。但它能够解决捆绑和项目对 maven 存储库和 Eclipse 更新站点的依赖关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2012-12-17
    • 2017-05-17
    • 2015-04-21
    • 2013-01-30
    相关资源
    最近更新 更多