构建与编译(Java)

six*_*ude 127 java compilation build

认为对此的答案非常明显,但在这里:

当我在学校的一个小项目(在java中)时,我编译它.

在我的鸡舍上,我们使用ant来构建我们的项目.

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

相关:
编译和构建有什么区别?

Pas*_*ent 217

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

  1. 生成源(有时).
  2. 编译来源.
  3. 编译测试源.
  4. 执行测试(单元测试,集成测试等).
  5. 包装(装入罐子,战争,ejb-jar,耳朵).
  6. 运行健康检查(Checkstyle,Findbugs,PMD,测试覆盖等静态分析器).
  7. 生成报告.

正如您所看到的,编译只是构建的一个(小)部分(最佳实践是使用Maven或Ant等工具完全自动化所有步骤,并连续运行构建,称为持续集成).

  • 为什么称其为“持续集成”而不是“持续建设”? (5认同)
  • @Pacerier"构建"指的是所有步骤1.-7."持续"并不意味着您在第一次完成后立即开始下一次构建,但仅限于项目中的更改. (3认同)
  • @QuaziIrfan 因为您正在验证新的或更新的代码是否与现有代码库集成。也就是说,您的更改可以编译,它们符合团队的编码标准和要求,其基本功能良好,并且不会破坏当前的良好构建。换句话说,您的更新与现有代码库很好地集成。华泰 (2认同)

Dar*_*ien 41

我在这里看到的一些答案是脱离上下文的,如果这是一个C/C++问题则更有意义.

精简版:

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

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

通常会有其他阶段,例如"package",它将所有.class文件放入.jar,或"clean"清除.class文件和临时目录.


Kai*_*ili 29

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

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

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

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

编译代码和可执行代码之间有什么区别?


Tom*_*Tom 9

简单来说

编译将java代码(人类可读)转换为字节码,因此虚拟机可以理解它.

构建将所有已编译的部分放在一起并创建(构建)可执行文件.


Pre*_*raj 6

  • 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.
Run Code Online (Sandbox Code Playgroud)