ビルドとコンパイル(Java)


138

これに対する答えはかなり明白であると思いますが、ここにそれは行きます:

学校用の小さなプロジェクト(Java)に取り組んでいるとき、それをコンパイルします。

私の小屋では、antを使用てプロジェクトを構築しています。

コンパイルはビルドのサブセットだと思います。これは正しいです?ビルドとコンパイルの違いは何ですか?

関連:
コンパイルとビルドの違いは何ですか?

回答:


229

「ビルド」は、ソフトウェアの「成果物」を作成するために必要なすべてのステップをカバーするプロセスです。Javaの世界では、これには通常、次のものが含まれます。

  1. ソースの生成(時々)。
  2. ソースのコンパイル。
  3. テストソースのコンパイル。
  4. テストの実行(単体テスト、統合テストなど)。
  5. パッケージ化(jar、war、ejb-jar、earへ)。
  6. ヘルスチェックの実行(Checkstyle、Findbugs、PMD、テストカバレッジなどの静的アナライザー)。
  7. レポートの生成。

ご覧のとおり、コンパイルはビルドの(ほんの一部)にすぎません(ベストプラクティスは、MavenやAntなどのツールを使用してすべてのステップを完全に自動化し、継続的インテグレーションと呼ばれるビルドを継続的に実行することです)。


2
なぜそれを「継続的構築」ではなく「継続的統合」と呼ぶのですか?
Quazi Irfan 2016

@ Pascal、Re "ビルドを継続的に実行する" .. " ビルド "とは?
Pacerier 2016

4
@Pacerier「ビルド」は、すべてのステップ1.〜7.を指します。「継続的」とは、最初のビルドが終了した直後に次のビルドを開始することを意味するのではなく、プロジェクトの変更についてのみです。
michelek

最初のポイントで言及したようにソースを生成するとき(ソースの生成(ときどき))
Deepak Gupta

42

ここで私が見る回答の一部は文脈外のものであり、これがC / C ++の質問である場合はより理にかなっています。

短縮版:

  • 「コンパイル」は.javaファイルを.classファイルに変換します
  • 「ビルド」とは、コンパイルやその他のタスクを含む総称です。

「ビルド」は、コンパイルを含むプロセス全体を表す一般的な用語です。たとえば、ビルドプロセスには、Javaコードまたはドキュメントファイルを生成するツールが含まれる場合があります。

多くの場合、すべての.classファイルを取得して.jarに入れる「パッケージ」や、.classファイルと一時ディレクトリを削除する「クリーン」などの追加のフェーズがあります。


32

コンパイルとは、ソースコードをオブジェクトコードに変換することです。

リンクとは、オブジェクトコードとライブラリを組み合わせて生の実行可能ファイルにすることです。

ビルドは、コンパイルリンクで構成されるシーケンスであり、インストーラーの作成などの他のタスクが含まれる可能性があります。

多くのコンパイラは、ソースコードをコンパイルした後、リンク手順を自動的に処理します。

コンパイルコードと実行可能コードの違いは何ですか?


その他の可能なタスク:拡張(JDO)、Javadoc-ing、パッケージ化、および署名。さらに、「ビルド」の一部として自動化されたユニット/回帰テストの実行を含む一部の環境。
バートF

通常、Javaプロジェクトをビルドするときにリンク手順はなく、生の実行可能ファイルは生成されません。むしろ、コンパイルされたクラスは、ビルドの一部として.jarファイルに一緒にパッケージ化されます。(または、ターゲット環境に応じて.warまたは.ear。)
markusk 2010

1
「生の実行可能ファイル」とは何ですか?
ealeon 2013

基本的にそれ自体では役に立たないビットの袋は、それが必要とする他のライブラリと混合することなく、それ自体では役に立ちません。チョコレートケーキみたいです。小麦粉や卵などがなければ、カカオは生のカカオです。
凱里

9

簡単な言葉で

コンパイルはJavaコード(人間が読める形式)をバイトコードに変換するため、仮想マシンはそれを理解します。

ビルドは、コンパイルされたすべての部分をまとめ、実行可能ファイルを作成(ビルド)します。


あなたが話しているのは「解釈」です...コンパイルは人間が読めるコードを機械語に変えます
mortsahl

@トム、あなたは「実行可能」または「jar実行可能」を意味しますか?
Pacerier 2016

4

実際、あなたは同じことをしています。Antは、ソフトウェアのコンパイルに関連するさまざまなタスクを実行できるXML構成ファイルに基づくビルドシステムです。Javaコードのコンパイルは、これらのタスクの1つにすぎません。ファイルのコピー、サーバーの構成、zipとjarのアセンブル、Cなどの他の言語のコンパイルなど、他にもたくさんあります。

ソフトウェアをコンパイルするのにAntは必要ありません。学校で行うように手動で行うことができます。Antのもう1つの代替手段は、Mavenという製品です。AntとMavenはどちらも同じことを行いますが、方法はまったく異なります。

検索のAntMavenの詳細について。


また、ビルドファイル(おそらくbuild.xmlと呼ばれる)を調べることで、antが実際に何をしているかを確認することもできます。構文に慣れていない場合でも、何が起こっているのかをある程度確認できます。<javac>は、Javaコードをコンパイルすることを意味します。<java>は、コンパイルされたコードを実際に実行していることを意味します。おそらくそれは多分など、いくつかのJavadocを作成、コードをコンパイルし、中の.classファイルを配置するディレクトリを作成しています
MatrixFrog

4
  • ビルドは、プログラムのコンパイルされたバージョンです。
  • コンパイルとは、(プログラムを)プログラムを実行できるマシンコードまたは下位レベルの形式に変換することを意味します。

Javaの場合:ビルドはライフサイクルであり、名前付きフェーズのシーケンスが含まれています。

たとえば、mavenには3つのビルドライフサイクルがあり、次の1つは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のビルドプロセスは、以前のパッケージのクリーニング、検証、コンパイル、テスト、パッケージ化、
統合、検証、インストール、デプロイの手順で構成されています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.