所有Java Build工具都有什么用?

时间:2009-09-05 04:11:34

标签: java maven-2 ant build-automation buildr

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

10 个答案:

答案 0 :(得分:27)

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

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

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

  • 插件:构建工具附带了各种插件,可以在构建期间执行各种操作。从生成Javadocs等基础知识到运行测试和获取代码覆盖率,静态分析,生成报告等更重要的事情。

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

查看一些持续集成服务器,例如CruiseControlHudson。此外,features page of Maven提供了一些您想知道的内容。

答案 1 :(得分:12)

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

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

答案 2 :(得分:3)

如果您是单个开发人员或非常小的团队,那么构建系统似乎只是一个开销。随着开发人员数量的增加,尽管很难跟踪所有更改并确保开发人员保持同步。随着团队的发展,构建系统可以降低这些开销的增长率。一旦有100多名开发人员参与该项目,请考虑在Eclipse中构建所有代码的问题。

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

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

当然还有direct benefits构建系统。模块化构建系统可减少复制粘贴问题并处理依赖项解决和其他构建相关问题。这个应该允许开发人员专注于提供代码。当然,每个新工具都会引入自己的问题,所涉及的学习曲线可能会使构建系统看起来像是一个不必要的开销(只有Google I hate Maven才能得到一些想法)。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

@anonymous,

  • 为什么我认为我是一名成员 您的团队,正在使用IDE 时间?我可能想要构建代码 在无头构建服务器上,就是这样 OK?
  • 你还会否认我的权利吗? 使用持续集成 发动机?
  • 我可以从中央存储库中获取依赖项吗?我该怎么办?
  • 你会把我绑到一个特定的IDE吗?我不能在我的旧笔记本电脑上轻松运行Eclipse,但我会买一台新的。

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

答案 6 :(得分:1)

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

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

能够实现自动化是非常方便的。

答案 7 :(得分:0)

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

对我而言,最重要的原因是自动构建。

答案 8 :(得分:0)

IDE只适用于更高的抽象层。

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

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

使用IDE更改配置意味着单击某个易于进行基本操作的地方,但对于复杂的内容,您需要找到正确的单击位置。此外,IDE似乎隐藏了重要信息。单击按钮添加库很容易,但您可能仍然不知道库的位置等。

相比之下,使用CLI并不容易入手,但变得很容易。它可以更容易地完成复杂的事情。

使用Ant或Maven意味着每个人都可以选择他/她自己的IDE来处理代码。告诉某人安装IDE X来编译它比在shell中运行“运行< build命令>”要花费更多的开销。当然,你不能将前者解释为外部工具。

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

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

答案 9 :(得分:0)

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