构建与编译(Java)


138

认为答案很明显,但是可以解决:

当我在为学校设计一个小型项目时(使用Java),我对其进行了编译

在我的小屋中,我们正在使用ant来构建我们的项目。

我认为编译是构建的一部分。这样对吗?构建和编译有什么区别?

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

Answers:


229

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

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

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


2
为什么称其为“持续集成”而不是“连续建筑”?
Quazi Irfan

@Pascal,重新“连续运行构建” ..“ 构建 ”指的是?
Pacerier '16

4
@Pacerier“构建”是指所有步骤1.-7。“连续”并不意味着您在第一个构建完成后立即开始下一个构建,而仅是在项目更改时。
michelek

以及您在第一点提到的生成源时(生成源(有时)。)
Deepak Gupta

42

我在这里看到的某些答案是上下文无关的,如果这是C / C ++问题,则更有意义。

精简版:

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

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

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


32

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

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

构建是由编译链接以及可能的其他任务(如安装程序创建)组成的序列。

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

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


其他一些可能的任务:增强(JDO),Javadocing,打包和签名。另外,某些环境包括作为“构建”的一部分运行自动化的单元/回归测试。
Bert F

通常,在构建Java项目时没有链接步骤,并且不会生成原始可执行文件。而是,将已编译的类作为构建的一部分打包到一个.jar文件中。(或.war或.ear,取决于您的目标环境。)
markusk 2010年

1
什么是“原始可执行文件”?
ealeon

基本上没有用的零零碎碎的零钱包,无需与所需的其他库混在一起。这很像一块巧克力蛋糕。没有面粉和鸡蛋等,可可只是生可可。
凯里

9

简单来说

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

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


您在说的是“解释” ...编译将人类可读的代码转换为机器代码
mortsahl 2014年

@Tom,您的意思是“可执行文件”或“ jar可执行文件”?
佩里耶

4

实际上,您正在做相同的事情。Ant是基于XML配置文件的构建系统,该文件可以执行与编译软件有关的各种任务。编译Java代码只是这些任务之一。还有许多其他功能,例如到处复制文件,配置服务器,组装zip和jar以及编译其他语言(例如C)。

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

查找AntMaven以获得更多详细信息。


您还可以通过查看构建文件(很可能称为build.xml)来查看蚂蚁的实际操作。即使您不熟悉语法,也可以看到发生了什么。<javac>表示它正在编译一些Java代码。<java>表示它实际上正在运行编译的代码。也许它创建一个目录把.class文件中,编译代码,或许创造了一些的Javadoc,等等
MatrixFrog

4
  • 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.

1

在Eclipse和IntelliJ中,构建过程包括以下步骤:清理先前的软件包,验证,编译,测试,打包,
集成,验证,安装,部署。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.