【问题标题】:Building vs. Compiling (Java)构建与编译 (Java)
【发布时间】:2011-02-08 15:51:05
【问题描述】:

认为这个问题的答案很明显,但它就是这样:

当我在为学校(在 java 中)做一个小项目时,我编译它。

在我的合作社中,我们使用 ant 来构建我们的项目。

我认为编译是构建的一个子集。它是否正确?构建和编译有什么区别?

相关:
What is the difference between compiling and building?

【问题讨论】:

    标签: java build compilation


    【解决方案1】:

    简单来说

    编译翻译java代码(人工 可读)转换成字节码,所以 虚拟机可以理解。

    Building 将所有已编译的部分 一起创造(建立)一个 可执行文件。

    【讨论】:

    • 你说的是“解释”……编译就是把人类可读的代码变成机器代码
    • @Tom,您的意思是“可执行文件”还是“jar 可执行文件”?
    【解决方案2】:

    编译是将源代码转换为目标代码的行为。

    链接是将目标代码与库组合成原始可执行文件的行为。

    构建是由编译链接组成的序列,可能还有其他任务,例如创建安装程序。

    许多编译器在编译源代码后会自动处理链接步骤。

    What is the difference between compile code and executable code?

    【讨论】:

    • 其他一些可能的任务:增强 (JDO)、Javadoc-ing、打包和签名。此外,一些环境包括运行自动化单元/回归测试作为“构建”的一部分。
    • 通常,在构建 Java 项目时没有链接步骤,也不会生成原始可执行文件。相反,编译的类作为构建的一部分一起打包到一个 .jar 文件中。 (或 .war 或 .ear,取决于您的目标环境。)
    • 什么是“原始可执行文件”?
    • 如果不与它需要的其他库混在一起,它本身基本上是无用的。这很像巧克力蛋糕。没有面粉和鸡蛋等,可可只是生可可。
    【解决方案3】:

    实际上你正在做同样的事情。 Ant 是基于 XML 配置文件的构建系统,可以执行与编译软件相关的广泛任务。编译您的 java 代码只是其中一项任务。还有很多其他的,例如复制文件、配置服务器、组装 zip 和 jar 以及编译其他语言,例如 C。

    您不需要 Ant 来编译您的软件。您可以像在学校一样手动操作。 Ant 的另一个替代品是名为 Maven 的产品。 Ant 和 Maven 都做同样的事情,但方式完全不同。

    查找AntMaven 了解更多详情。

    【讨论】:

    • 您还可以通过查看构建文件(很可能称为 build.xml)来了解 ant 实际在做什么。即使您不熟悉语法,您也可以看到发生了什么。 表示它正在编译一些 Java 代码。 表示它实际上正在运行已编译的代码。可能它正在创建一个目录来放置 .class 文件,编译代码,可能创建一些 Javadoc,等等。
    【解决方案4】:

    编译只是将源代码转换为二进制,构建是编译并将所需的任何其他文件链接到构建目录中

    【讨论】:

      【解决方案5】:

      我在这里看到的一些答案是断章取义的,如果这是一个 C/C++ 问题,则更有意义。

      短版:

      • “编译”正在将 .java 文件转换为 .class 文件
      • “构建”是一个通用术语,包括编译和其他任务。

      “构建”是一个通用术语,描述了包括编译在内的整体过程。例如,构建过程可能包括生成 Java 代码或文档文件的工具。

      通常会有其他阶段,例如“打包”将所有 .class 文件放入 .jar 中,或“清理”将 .class 文件和临时目录清除。

      【讨论】:

        【解决方案6】:

        “构建”是一个涵盖创建软件“可交付成果”所需的所有步骤的过程。在 Java 世界中,这通常包括:

        1. 生成源(有时)。
        2. 编译源代码。
        3. 编译测试源代码。
        4. 执行测试(单元测试、集成测试等)。
        5. 包装(放入 jar、war、ejb-jar、ear)。
        6. 运行运行状况检查(静态分析器,如 Checkstyle、Findbugs、PMD、测试覆盖率等)。
        7. 生成报告。

        如您所见,编译只是构建的一小部分(最佳实践是使用 Maven 或 Ant 等工具完全自动化所有步骤并连续运行构建,这被称为 @987654321 @)。

        【讨论】:

        • 为什么叫它“持续集成”而不是“持续构建”?
        • @Pascal, Re “连续运行构建”..“构建”指的是?
        • @Pacerier “构建”指的是所有步骤 1.-7.; “持续”并不意味着您在第一个构建完成后立即开始下一个构建,而只是在项目更改时。
        • 以及当它生成您在第一点中提到的源时(生成源(有时)。)
        • @QuaziIrfan 因为您正在验证新的或更新的代码是否与现有代码库集成。也就是说,您的更改可以编译,它们符合团队的编码标准和要求,它的基本功能是好的,并且它们不会破坏当前的良好构建。换句话说,您的更新与现有代码库很好地集成在一起。 HTH
        【解决方案7】:
        • Build 是程序的编译版本。
        • 编译是指,将(程序)转换成机器码或程序可以执行的低级形式。

        在 Java 中:构建是一个生命周期,包含一系列命名阶段。

        例如:maven它有三个构建生命周期,下面一个是default构建生命周期。

        ◾validate - validate the project is correct and all necessary information is available
        ◾compile - compile the source code of the project
        ◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
        ◾package - take the compiled code and package it in its distributable format, such as a JAR.
        ◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
        ◾verify - run any checks to verify the package is valid and meets quality criteria
        ◾install - install the package into the local repository, for use as a dependency in other projects locally
        ◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
        

        【讨论】:

          【解决方案8】:

          在 Eclipse 和 IntelliJ 中,构建过程包括以下步骤: 清理以前的包裹, 证实, 编译, 测试, 包,
          一体化, 核实, 安装, 部署。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-18
            • 2012-07-27
            • 2021-02-07
            • 2011-05-12
            • 2019-04-01
            相关资源
            最近更新 更多