Будівництво проти компіляції (Java)


138

Думаючи, що відповідь на це є досить очевидним, але ось що:

Коли я працюю над невеликим проектом для школи (в java), я складаю його.

У моєму куратнику ми використовуємо мурашок для створення нашого проекту.

Я думаю, що складання - це підмножина побудови. Це правильно? Яка різниця між побудовою та складанням?

Пов'язане:
Яка різниця між складанням та побудовою?

Відповіді:


229

"Збірка" - це процес, який охоплює всі кроки, необхідні для створення "результатів" вашого програмного забезпечення. У світі Java це зазвичай включає:

  1. Генерування джерел (іноді).
  2. Складання джерел.
  3. Складання джерел тесту.
  4. Виконання тестів (модульні тести, інтеграційні тести тощо).
  5. Упаковка (в банку, на війну, у ejb-jar, у вухо).
  6. Запуск медичних перевірок (статичні аналізатори, такі як Checkstyle, Findbugs, PMD, тестове покриття тощо).
  7. Створення звітів.

Отже, як ви бачите, компілювання - це лише (невелика) частина збірки (а найкраща практика полягає в тому, щоб повністю автоматизувати всі етапи з такими інструментами, як Maven або Ant і безперервно запускати збірку, яка відома як Безперервна інтеграція ).


2
Чому це називають "Безперервна інтеграція" замість "Безперервне будівництво"?
Куазі Ірфан

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

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

і коли він генерує джерела, як ви згадуєте в 1-й точці (Генерування джерел (іноді).)
Діпак Гупта

42

Деякі відповіді, які я бачу тут, є поза контекстом і мають більше сенсу, якби це було питання C / C ++.

Коротка версія:

  • "Компіляція" перетворює файли .java у файли .class
  • "Побудова" - це загальний термін, який включає складання та інші завдання.

"Побудова" - це загальний термін, що описує загальний процес, який включає складання. Наприклад, процес збирання може включати інструменти, які генерують код Java або файли документації.

Часто будуть додаткові фази, наприклад "пакунок", який бере всі ваші файли .class і ставить їх у .jar, або "clean", який очищає файли .class і тимчасові каталоги.


32

Складання - це акт перетворення вихідного коду в об'єктний код.

Зв'язування - це акт об'єднання об'єктного коду з бібліотеками в необроблений виконуваний файл.

Побудова - це послідовність, що складається з компіляції та зв’язування , можливо, з іншими завданнями, такими як створення інсталятора.

Багато компіляторів автоматично обробляють етап з'єднання після компіляції вихідного коду.

Чим відрізняється код компіляції від виконуваного коду?


Деякі інші можливі завдання: поліпшення (JDO), Javadoc-ing, упаковка та підписання. Крім того, деякі середовища, включаючи виконання автоматизованих тестів на одиницю / регресію, є частиною "складання".
Берт F

Зазвичай при створенні Java-проектів немає кроку пов'язування, і не виробляється необроблений виконуваний файл. Швидше, складені класи пакуються разом у файл .jar як частина збірки. (Або .war, або .ear, залежно від вашого цільового оточення.)
markusk

1
що таке "сировина"?
ealeon

Мішок бітів, який в основному марний сам по собі, не змішуючись з іншими необхідними йому бібліотеками. Це дуже схоже на шоколадний торт. Без борошна і яєць тощо какао - це просто сире какао.
Каїлі

9

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

Компіляція переводить код Java (людський читабельний) в байт-код, тому Віртуальна машина це розуміє.

Побудова поєднує всі складені частини разом і створює (будує) виконуваний файл.


Про що ви говорите - це "Інтерпретація" ... компіляція - це перетворення людського читаного коду в машинний код
mortsahl

@Том, ти маєш на увазі "виконуваний файл" чи " виконувану банку "?
Pacerier

4

Насправді ви робите те саме. Ant - це система побудови на основі файлів конфігурації XML, яка може виконувати широкий спектр завдань, пов'язаних зі збиранням програмного забезпечення. Складання коду Java - лише одне із цих завдань. Є багато інших, таких як копіювання файлів навколо, налаштування серверів, збирання блискавок і банок, а також компіляція інших мов, таких як C.

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

Пошук Ant та Maven для отримання більш детальної інформації.


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

4
  • Збірка - це складена версія програми.
  • Скомпілювати означає, перетворити (програму) в машинний код або форму нижчого рівня, в якій програма може бути виконана.

У 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.