Сборка против компиляции (Java)


138

Думая, что ответ на это довольно очевиден, но здесь он идет:

Когда я работаю над небольшим проектом для школы (на языке Java), я его компилирую .

На моем курятнике мы используем муравей для создания нашего проекта.

Я думаю, что компиляция - это подмножество сборки. Это верно? В чем разница между сборкой и компиляцией?

Связанный:
Какая разница между компиляцией и сборкой?

Ответы:


229

«Сборка» - это процесс, охватывающий все этапы, необходимые для создания «поставляемого» программного обеспечения. В мире Java это обычно включает в себя:

  1. Генерация источников (иногда).
  2. Компиляция источников.
  3. Составление тестовых источников.
  4. Выполнение тестов (юнит-тесты, интеграционные тесты и т. Д.).
  5. Упаковка (в банку, войну, эйб-банку, колос).
  6. Проверка работоспособности (статические анализаторы, такие как Checkstyle, Findbugs, PMD, тестовое покрытие и т. Д.).
  7. Генерация отчетов.

Итак, как вы можете видеть, компиляция является лишь (небольшой) частью сборки (и лучше всего полностью автоматизировать все шаги с помощью таких инструментов, как Maven или Ant, и непрерывно запускать сборку, известную как непрерывная интеграция ).


2
Зачем называть это «Непрерывная интеграция» вместо «Непрерывное строительство»?
Quazi Irfan

@Pascal, Re "запустить сборку постоянно" .. " сборка " относится к?
Pacerier

4
@Pacerier "сборка" относится ко всем шагам 1.-7 .; «непрерывно» не означает, что вы начинаете следующую сборку сразу после ее завершения, но только при изменениях в проекте.
michelek

и когда он генерирует источники, как вы упоминаете в 1-м пункте (Генерация источников (иногда).)
Дипак Гупта

42

Некоторые из ответов, которые я вижу здесь, выходят за рамки контекста и имеют больше смысла, если бы это был вопрос C / C ++.

Укороченная версия:

  • «Компиляция» превращает файлы .java в файлы .class
  • «Сборка» - это общий термин, включающий компиляцию и другие задачи.

«Строительство» - это общий термин, описывающий общее процесс, который включает компиляцию. Например, процесс сборки может включать инструменты, которые генерируют код Java или файлы документации.

Часто возникают дополнительные фазы, такие как «пакет», который берет все ваши файлы .class и помещает их в .jar, или «чистый», который очищает файлы .class и временные каталоги.


32

Компиляция - это процесс превращения исходного кода в объектный код.

Связывание - это процесс объединения объектного кода с библиотеками в сырой исполняемый файл.

Сборка - это последовательность, состоящая из компиляции и компоновки , возможно, с другими задачами, такими как создание установщика.

Многие компиляторы обрабатывают шаг компоновки автоматически после компиляции исходного кода.

В чем разница между кодом компиляции и исполняемым кодом?


Некоторые другие возможные задачи: улучшение (JDO), Javadocing, упаковка и подписывание. Кроме того, некоторые среды включают запуск автоматических модульных / регрессионных тестов как часть «сборки».
Берт F

Обычно при создании Java-проектов не выполняется шаг компоновки, и не создается необработанный исполняемый файл. Скорее, скомпилированные классы упакованы вместе в файл .jar как часть сборки. (Или .war, или .ear, в зависимости от вашей целевой среды.)
markusk

1
Что такое "сырой исполняемый файл"?
ealeon

Мешок с битами, который сам по себе бесполезен и не смешивается с другими необходимыми библиотеками. Это очень похоже на шоколадный торт. Без муки, яиц и т. Д. Какао - это просто сырое какао.
Кайли

9

Простыми словами

Компиляция переводит код Java (читаемый человеком) в байт-код, поэтому виртуальная машина понимает его.

Сборка объединяет все скомпилированные части и создает (создает) исполняемый файл.


То, о чем вы говорите, это «Интерпретация» ... компиляция превращает читаемый человеком код в машинный код
mortsahl

@ Tom, Вы имеете в виду «исполняемый файл» или « исполняемый файл jar »?
Pacerier

4

На самом деле вы делаете то же самое. Ant - это система сборки, основанная на файлах конфигурации XML, которая может выполнять широкий спектр задач, связанных с компиляцией программного обеспечения. Компиляция вашего Java-кода является лишь одной из таких задач. Есть много других, таких как копирование файлов, настройка серверов, сборка zip и jar-файлов и компиляция других языков, таких как C.

Вам не нужен Ant для компиляции вашего программного обеспечения. Вы можете сделать это вручную, как в школе. Другой альтернативой Ant является продукт под названием Maven. И Муравей, и Мэйвен делают одно и то же, но совершенно по-разному.

Поиск Ant и Maven для более подробной информации.


Вы также можете увидеть, что на самом деле делает ant, посмотрев файл сборки (скорее всего, с именем build.xml). Даже если вы не знакомы с синтаксисом, вы можете увидеть, что происходит. <javac> означает, что он компилирует некоторый код Java. <java> означает, что на самом деле выполняется скомпилированный код. Возможно, это создание каталога для размещения файлов .class, компиляция кода, возможно, создание Javadoc и т. Д.
MatrixFrog

4
  • Build - это скомпилированная версия программы.
  • Компилировать означает преобразовать (программу) в машинный код или форму более низкого уровня, в которой программа может быть выполнена.

В Java : Build - это жизненный цикл, содержащий последовательность именованных фаз.

например: 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 процесс сборки состоит из следующих этапов: очистка предыдущих пакетов, проверка, компиляция, тестирование, пакет,
интеграция, проверка, установка, развертывание.


0

Компиляция - это просто преобразование исходного кода в двоичный, сборка - это компиляция и связывание любых других файлов, необходимых в каталог сборки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.