【问题标题】:Java builder with proper dependency handling具有适当依赖关系处理的 Java 构建器
【发布时间】:2010-10-30 15:01:56
【问题描述】:

在最近玩弄了我们的 ant 脚本之后,我开始怀疑是否有更好的方法。

我需要一个知道为我重新编译所有必需的 .java 文件的构建器。

例如。对于这个结构

public class A { ]
public class B extends A {}
public class C {
    B b;
}
  1. 对于:Compile('C') 会知道编译 A、B、C。
  2. 对于:B 已更改,Compile('C') 将只知道重新编译 B。

我知道几个替代方案,Ivy 这似乎是我们当前的 java 构建器 ant 的扩展。 Scons 我们目前用于构建 C++ 代码,scons 在执行上述 C 代码行为方面非常出色。然后有报道称Mavenalmost but not quite there

你有什么建议?您在构建系统时使用了哪些免费软件/商业工具?

谢谢你, 马克西姆。

【问题讨论】:

    标签: ant build-process dependencies compilation scons


    【解决方案1】:

    ivy、scons 或 maven 都不会帮助您解决上述问题。

    1. “for Compile('C')”是什么意思?我认为这不是您的 ant 文件中的内容。
    2. 对于这种情况,Ant 应该可以按需要工作:您已经描述了它的默认行为。在同一个 javac 元素中,Ant 只会重新编译更改的类。请参阅 javac 任务的 Ant manual 条目,尤其是“includeDestClasses”属性。

    您可能应该发布一个您发现不足的示例 ant 文件。

    【讨论】:

      【解决方案2】:
      1. Ant,带有'depend' task 并打开了“关闭”选项
      2. 'make',来自 IDEA ide

      【讨论】:

        【解决方案3】:

        在您的问题中,您描述了类间依赖关系。大多数构建系统,尤其是 Maven,更多地针对项目间的依赖关系。我相信大多数系统只是重新编译项目中的所有类,这些构建系统的大部分好处在于构建尽可能少的项目。

        Maven 和 Ivy 都允许您轻松指定项目的外部和内部依赖项,包括您依赖的项目版本。如果它们尚未在本地缓存,它们还将自动将外部库(例如 apache commons)下载到您的本地计算机作为构建过程的一部分,从而节省大量手动下载和组织第三方 jar 文件的工作。

        正如你提到的,Ivy 是 ant 的扩展。我推荐马文。这是一个面向约定的构建系统,我已经成功使用并且感觉非常成熟。 Maven 开始使用所需的前期工作量要少得多,而且可扩展性强。

        【讨论】:

        • re: ivy vs maven:对于开始一个新项目,我同意 Maven 需要较少的前期工作。对于现有项目(例如这个),Ivy 可以简单地“插入”,而 Maven 通常需要更多初始努力来调整其预期。这是要求遵守约定的福与祸。
        【解决方案4】:

        maven,适用于我的个人产品和商业产品

        【讨论】:

          猜你喜欢
          • 2023-03-23
          • 2012-12-04
          • 2022-01-26
          • 2015-05-11
          • 2021-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-20
          相关资源
          最近更新 更多