构建与编译 (Java)
Posted
技术标签:
【中文标题】构建与编译 (Java)【英文标题】:Building vs. Compiling (Java) 【发布时间】:2011-02-08 15:51:05 【问题描述】:认为这个问题的答案很明显,但它就是这样:
当我在为学校(在 java 中)做一个小项目时,我编译它。
在我的合作社中,我们使用 ant 来构建我们的项目。
我认为编译是构建的一个子集。它是否正确?构建和编译有什么区别?
相关:What is the difference between compiling and building?
【问题讨论】:
【参考方案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 都做同样的事情,但方式完全不同。
查找Ant 和Maven 了解更多详情。
【讨论】:
您还可以通过查看构建文件(很可能称为 build.xml)来了解 ant 实际在做什么。即使您不熟悉语法,您也可以看到发生了什么。编译只是将源代码转换为二进制,构建是编译并将所需的任何其他文件链接到构建目录中
【讨论】:
【参考方案5】:我在这里看到的一些答案是断章取义的,如果这是一个 C/C++ 问题,则更有意义。
短版:
“编译”正在将 .java 文件转换为 .class 文件 “构建”是一个通用术语,包括编译和其他任务。“构建”是一个通用术语,描述了包括编译在内的整体过程。例如,构建过程可能包括生成 Java 代码或文档文件的工具。
通常会有其他阶段,例如“打包”将所有 .class 文件放入 .jar 中,或“清理”将 .class 文件和临时目录清除。
【讨论】:
【参考方案6】:“构建”是一个涵盖创建软件“可交付成果”所需的所有步骤的过程。在 Java 世界中,这通常包括:
-
生成源(有时)。
编译源代码。
编译测试源代码。
执行测试(单元测试、集成测试等)。
包装(放入 jar、war、ejb-jar、ear)。
运行运行状况检查(静态分析器,如 Checkstyle、Findbugs、PMD、测试覆盖率等)。
生成报告。
如您所见,编译只是构建的一小部分(最佳实践是使用 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 中,构建过程包括以下步骤: 清理以前的包裹, 证实, 编译, 测试, 包, 一体化, 核实, 安装, 部署。
【讨论】:
以上是关于构建与编译 (Java)的主要内容,如果未能解决你的问题,请参考以下文章