34

使用 ant、maven 和 buildr 有什么意义?在 eclipse 或 netbeans 中使用 build 不会正常工作吗?我只是好奇扩展构建工具的目的和好处是什么。

4

10 回答 10

28
  • 依赖管理:构建工具遵循组件模型,该模型提供有关在何处查找依赖项的提示。在 Eclipse / Netbeans 中,您必须依赖一个 JAR,而且您并不知道该 JAR 是否已更新。使用这些构建工具,他们“知道”依赖项的更新(通常是因为与您的源代码控制存储库的良好集成),重新计算传递依赖项并确保所有内容始终使用最新版本构建。

  • 访问控制:Java,除了类级别的访问控制,没有更高的抽象。使用这些构建工具,您可以准确指定您希望依赖哪些项目,并以更高的粒度控制可见性和访问。

  • 自定义控件:Eclipse / Netbeans 构建始终构建 JAR 文件。使用自定义构建机制,如果您愿意,您可以使用额外的元数据信息构建您自己的自定义(公司内部)存档。

  • 插件:构建工具附带了各种插件,它们可以在构建过程中做各种事情。从生成 Javadocs 之类的基本内容到运行测试和获取代码覆盖率、静态分析、生成报告等更重要的内容。

  • 传输:一些构建系统还管理档案的传输——从开发系统到部署或生产系统。因此,您可以配置运输路线、时间表等。

看看一些持续集成服务器,例如CruiseControlHudson。此外,Maven 的特性页面提供了一些关于您想了解的信息。

于 2009-09-05T04:33:45.427 回答
12

在所有其他答案之上。我保持我的项目可构建而不被迫使用 NetBeans 或 Eclipse 的主要原因是它使设置自动化(和连续)构建变得非常容易。

设置一个以某种方式启动 eclipse、从存储库更新源、构建它、发送带有结果的邮件并将输出复制到最后 50 个构建的磁盘上的某个位置的服务器会相当复杂(相比之下)被存储。

于 2009-09-05T05:25:56.707 回答
4

如果您是单个开发人员或非常小的团队,那么构建系统似乎只是一种开销。随着开发人员数量的增加,跟踪所有更改并确保开发人员保持同步很快变得困难。随着团队的壮大,构建系统会降低这些开销的增长率。一旦有 100 多名开发人员在项目上工作,请考虑在 Eclipse 中构建所有代码的问题。

拥有一个单独的构建系统的一个令人信服的理由是确保交付给您的客户的内容是从签入您的 SCM 的特定版本的代码编译而来的。这消除了一整类“在我的盒子上工作”的问题,在我看来,这种好处在减少支持时间方面是值得的。独立的构建(比如在CI 服务器上)还突出了开发中的问题,例如提交了部分或重大更改的地方,因此您有机会及早发现问题。

IDE 中的构建可以构建盒子上的任何东西,而独立的构建系统将直接从 SCM 生成可重现的构建。当然,这可以在 IDE 中完成,但 AFAIK 只能通过调用 Ant 或 Maven 之类的东西来处理所有构建步骤。

当然,构建系统也有直接的好处。模块化构建系统减少了复制粘贴问题并处理依赖关系解析和其他构建相关问题。这应该允许开发人员专注于交付代码。当然,每个新工具都会引入自己的问题,并且所涉及的学习曲线会使构建系统看起来是不必要的开销(只是谷歌,我讨厌 Maven来获得一些想法)。

于 2009-09-07T15:45:58.860 回答
2

从 IDE 构建的问题在于,有大量设置会影响构建。当您使用构建工具时,所有设置都以或多或少的可读形式压缩到一小组脚本或配置文件中。在理想情况下,这允许任何人几乎无需任何手动设置即可执行构建。

如果没有构建工具,甚至可能在一年内编译您的代码几乎是不可能的,因为您必须对所有设置进行逆向工程

于 2009-09-05T05:11:27.610 回答
1

不同的特点。例如,Maven 可以扫描您的依赖项并下载它们以及它们的依赖项,因此您不必这样做。即使是中型项目,也可能存在大量依赖项。我不认为 Eclipse 可以做到这一点。

于 2009-09-05T04:16:44.383 回答
1

@匿名的,

  • 为什么我认为我,作为你团队的一员,一直在使用 IDE?我可能想在无头构建服务器上构建代码,可以吗?
  • 你还会否认我使用持续集成引擎的权利吗?
  • 请问我可以从中央存储库获取依赖项吗?我怎样才能做到这一点?
  • 你会把我绑定到特定的 IDE 吗?我不能在我非常旧的笔记本电脑上轻松运行 Eclipse,但我会买一台新的。

也许我还应该卸载 subversion 并使用补丁或只是 sftp/ftp/Samba 共享上的 zip 文件夹。

于 2009-09-05T04:38:20.080 回答
1

构建工具允许您自动进行构建,无需人工发明,如果您有一个能够构建许多应用程序的代码库(就像我们一样),这是必不可少的。

我们希望确保我们的每个应用程序都可以在任何代码库更改后正确构建。最好的检查方法是让计算机使用 Continouos 集成工具自动完成。我们只需签入代码,CI 服务器就会发现有更改并重建受该更改影响的所有模块。如果有任何损坏,将直接邮寄负责人。

能够使事情自动化是非常方便的。

于 2009-09-05T09:30:04.703 回答
0

为了扩展 Jens Schauder 的答案,许多构建选项最终都出现在某种 .project 文件中。Eclipse 的一个缺点是它们将绝对路径名存储在它的所有项目文件中,因此您不能将项目文件从一台机器复制到另一台机器,它的工作区可能位于不同的目录中。

对我来说最强烈的原因是自动化构建。

于 2009-09-05T06:05:39.013 回答
0

IDE 只在更高的抽象层上工作。

NetBeans 原生使用 Ant 作为其底层构建工具,最近可以直接在 NetBeans 中打开 maven 项目。因此,您的典型 NetBeans 项目可以用 ant 编译,而您的 maven 项目已经是一个 NetBeans 项目。

与每个 GUI 与 CLI 的讨论一样,IDE 对初学者来说似乎更容易,但一旦你明白了,做复杂的事情就会变得很麻烦。

使用 IDE 更改配置意味着单击某个位置,这对于基本的事情来说很容易,但对于复杂的事情,您需要找到正确的点击位置。此外,IDE 似乎隐藏了重要信息。单击按钮添加库很容易,但您可能仍然不知道库在哪里,等等。

相比之下,使用 CLI 开始并不容易,但很快就会变得容易。它允许更轻松地完成复杂的事情。

使用 Ant 或 Maven 意味着每个人都可以选择自己的 IDE 来处理代码。告诉某人安装 IDE X 来编译它比告诉“在你的 shell 中运行 <build command>”要多得多。当然,您无法向外部工具解释前者。

总而言之,IDE 本身就使用了构建工具。如果使用 NetBeans Ant(或 Maven),那么您可以获得所有这些优点和缺点。Eclipse 使用它自己的东西(据我所知),但也可以集成 ant 脚本。

至于构建工具本身,Maven 与 Ant 有很大不同。它可以下载指定的依赖项,直到下载 Web 服务器来运行您的项目。

于 2009-09-05T09:23:25.477 回答
0

在所有项目中,开发人员经常会手动调用 Build 过程。但它并不适合大型项目,在这些项目中,很难跟踪构建过程中需要构建的内容、顺序和依赖关系。因此,我们为我们的项目使用构建工具。
构建工具 在应用程序中完成各种任务,这些任务将由开发人员在日常生活中完成。
它们是
1.Downloading 依赖项。
2.将源代码编译成二进制代码。
3.打包该二进制代码。
4.运行测试。
5.部署到生产系统。

于 2017-04-12T12:39:43.757 回答