Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



ソフトウェア開発中、開発者は同じコードを何度も再構築する必要があります。彼らはしばしばbashスクリプトまたは他のスクリプト言語を使用してタスクを自動化しようとします。ただし、ビルドの自動化により適したビルドツールが利用可能です。主なビルドツールは次のとおりです。

詳細については、ツールを調べてみましょう。







アイビーとApacheAnt

Apache Antは、XMLファイルを使用してビルドスクリプトを定義するJavaベースのコマンドラインツールです。主にJavaビルドに使用されますが、C / C ++開発にも使用できます。組み込みタスクは、ソフトウェアアプリケーションをコンパイル、アセンブル、テスト、および実行する方法を提供します。ユーザーは、独自のantlibを作成して、Antの機能を強化することもできます。 Apache Ivyは、Antと簡単に統合して、より堅牢なエコシステムを提供する依存関係管理ツールです。 Antの開発は2000年に始まりました。



長所



  • ビルドプロセス全体のより良い制御
  • あらゆる作業プロセスで作業するのに十分な柔軟性

短所





  • XMLベースのビルドファイルは大きくなり、保守できなくなる可能性があります
  • ビルドスクリプトを維持するには、多くの時間とリソースが必要です
  • IDE統合を実現するのは難しい

アイビーの例を持つアリ

最新のAntはからインストールできます ここ 。 zipをダウンロードし、展開して、パスにbinフォルダーを配置する必要があります。次のコマンドを使用して、Antが正しくインストールされているかどうかを確認できます。

$アリ-バージョン
Apache Ant((TM)。2月にコンパイルされたバージョン1.10.12 2017年

Antをインストールしたら、最新のIvy jarをダウンロードして、Antディレクトリ内のlibフォルダに置くことができます。



Antをインストールしたら、helloworldフォルダーとhelloworld / srcフォルダーを作成します。 srcフォルダー内に、次のコードを含むhelloworld.javaファイルを配置します。

/ **************************

「HelloWorld!」を出力します

*************************** /

公衆 クラスこんにちは世界{{

公衆 静的 空所主要(( []args)。 {{
システムアウトprintln(('こんにちは世界!')。;
}

}

次に、helloworldフォルダーに次のコードを使用してbuild.xmlファイルを作成します。

xmlns:ivy='antlib:org.apache.ivy.ant' 名前='こんにちは世界' ディフォルト=「瓶」>>

名前='src.dir' 価値='src'/>
名前='build.dir' 価値='建てる'/>
名前='classes.dir' 価値='$ {build.dir} / classes'/>
名前='am.dir' 価値='$ {build.dir} / bin'/>
名前='lib.dir' 価値='lib' />
id='lib.path.id'>>
あなたへ='$ {lib.dir}' />
>>

名前='解決'>>
/>
>>

名前='掃除'>>
あなたへ='$ {build.dir}'/>
>>

名前='コンパイル' 依存します='解決'>>
あなたへ='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' classpathref='lib.path.id'/>
>>

名前=「瓶」 依存します='コンパイル'>>
あなたへ='$ {bin.dir}'/>
destfile='$ {bin.dir} / $ {ant.project.name} .jar' baseir='$ {classes.dir}'/>
>>

>>

また、同じhelloworldフォルダーに、次のコードを使用してivy.xmlファイルを作成します。

バージョン=「2.0」>>
組織='org.apache' モジュール='こんにちは世界'/>
>>
組織=「junit」 名前=「junit」 rev=「4.12」/>
>>
>>

ディレクトリ構造は次のようになります。

こんにちは世界
| -build.xml
| --ivy.xml
`-src
`-helloworld.java

これで、次のコマンドを使用してビルドを実行できます。

$

ビルドが成功すると、次のような出力が得られます。

$ ant jar
ビルドファイル:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

解決:
[ivy:retrieve] :: Apache Ivy 2.4.0-20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] ::設定の読み込み:: url = jar:file:/ Users / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] ::依存関係の解決:: org.apache#helloworld; [メール保護]
MacBook-Air.local
[ivy:retrieve] confs:[デフォルト]
[ivy:retrieve]公開でjunit#junit; 4.12が見つかりました
[ivy:retrieve] org.hamcrest#hamcrest-core; 1.3が公開されました
[ivy:retrieve] ::解決レポート:: 397msを解決::アーティファクトdl15ms
-------------------------------------------------- -------------------
| |モジュール||アーティファクト|
| conf |番号|検索| dwnlded |退去||番号| dwnlded |
-------------------------------------------------- -------------------
|デフォルト| 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy:retrieve] ::取得:: org.apache#helloworld
[ivy:retrieve] confs:[デフォルト]
[ivy:retrieve] 0個のアーティファクトがコピーされ、4個が既に取得されています(0kB / 39ms)

コンパイル:
[mkdir]作成されたディレクトリ:/ Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
クラス
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22:警告:
'includeantruntime'は設定されておらず、デフォルトはbuild.sysclasspath = lastです。 falseに設定
繰り返し可能なビルドの場合
[javac] 1つのソースファイルを/ Users / zak / _work / LearnBuildScripts / LearnANT /にコンパイルします
helloworld / build / classes

瓶:
[mkdir]作成されたディレクトリ:/ Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] jarのビルド:/ Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
helloworld.jar

成功を収める
合計時間:6秒

次のようにjarファイルを試すことができます。

$ java -cp build / bin / helloworld。こんにちは世界
こんにちは世界

build / binフォルダーに配置するjarファイルを定義しました。フォルダーはビルド中に作成されます。 ant jarコマンドは、build.xml内のjarターゲットを呼び出します。

Maven

Mavenは、Antベースのスクリプトで直面する問題を解決するために開発されました。 XMLファイルを保持しましたが、編成に対して異なるアプローチを採用しました。 Antでは、開発者はすべてのタスクを作成する必要があります。 Mavenは、コードを整理するためのより強力な標準を実装することにより、タスクの作成を減らします。その結果、標準的なプロジェクトを開始するのが簡単になります。

また、開発を容易にする依存関係のダウンロードも導入されました。 AntにIvyが導入される前は、ユーザーは依存関係をローカルで管理する必要がありました。 Mavenは最初に依存関係管理の哲学を採用しました。

ただし、Mavensの厳格な標準により、カスタムビルドスクリプトを作成することは困難です。プロジェクトが厳格な基準に準拠している限り、このツールは簡単に操作できます。

長所

  • 自動依存関係のダウンロード
  • すべての依存関係は、Mavenスクリプトの一部としてソース管理に自動的に記録されます
  • ビルドプロセスを標準化および簡素化します
  • IDEおよびCI / CDシステムと簡単に統合

短所

  • カスタムワークフローの作成に柔軟性がない
  • 急な学習曲線とプロセスは初心者には理解しにくい
  • ビルドの問題と新しいライブラリの統合を解決するのに時間がかかる
  • 同じ依存関係の複数のバージョンには適していません

Mavenの例

最新のMavenはからダウンロードできます ここ 。次のようにインストールを確認できます。

$ mvn --version
Apache Maven 3.5.2((138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017年-10-18T00:5813-07:00)。
Mavenホーム:/Users/zak/BuildTools/Maven/apache-maven-3.5.2
Javaバージョン:1.8.0_74、ベンダー:Oracle Corporation
Javaホーム:/Library/Java/JavaVirtualMachines/jdk1.8.0_74。jdk/ Contents / Home / jre
デフォルトのロケール:en_US、プラットフォームエンコーディング:UTF-8
OS名:'mac os x'、 バージョン:'10 .11.6 '、 アーチ:'x86_64'、 家族:'マック'

helloworldフォルダーを作成し、次のコマンドを使用してプロジェクトを生成します。

$ mvn archetype:generate -DgroupId = com。会社名こんにちは世界-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =NS

フォルダ構造を作成し、次のような出力を生成する必要があります。

[情報]プロジェクトをスキャンしています...
[情報]
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報] Mavenスタブプロジェクトの構築(POMなし)1
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]
[情報] >>> maven-archetype-plugin:3.0.0:generate(default-cli)> generate-sources
@ standalone-pom >>>
[情報]
[情報]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@スタンドアロン-pom<<<
[情報]
[情報]
[情報] --- maven-archetype-plugin:3.0.0:generate(default-cli)@ Standand-pom ---
[情報]バッチモードでプロジェクトを生成しています
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------
[情報]古い(1.x)アーキタイプからプロジェクトを作成するために次のパラメーターを使用します。
maven-archetype-quickstart:1.0
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------
[情報]パラメーター:basedir、値:/ Users / zak / _work / LearnBuildScripts / LearnMaven
[情報]パラメーター:パッケージ、値:com.companyname.helloworld
[情報]パラメーター:groupId、値:com.companyname.helloworld
[情報]パラメーター:artifactId、値:helloworld
[情報]パラメーター:packageName、値:com.companyname.helloworld
[情報]パラメータ:バージョン、値:1.0-スナップショット
[情報]ディレクトリの古い(1.x)アーキタイプから作成されたプロジェクト:/ Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]成功を築く
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]合計時間:8.602秒
[情報]終了日:2018-01-27T00:05:37-08:00
[情報]最終メモリ:15M / 152M
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------

フォルダ構造は次のようになります。

こんにちは世界
|--pom.xml
--src
| - 主要
| -java
| - と
| - 会社名
| - こんにちは世界
| -App.java
-テスト
-java
- と
- 会社名
- こんにちは世界
-AppTest.java

pom.xmlには、ビルド構成が含まれています。 pom.xml内のコードは、次のようになります。

xmlns=「http://maven.apache.org/POM/4.0.0」 xmlns:xsi='http://www.w3.org/2001/
XMLSchema-インスタンス '
xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>>
>>4.0.0>>
>>com.companyname.helloworld>>
>>こんにちは世界>>
>>>>
>>1.0-スナップショット>>
>>こんにちは世界>>
>>http://maven.apache.org>>
>>
>>
>>junit>>
>>junit>>
>>3.8.1>>
>>テスト>>
>>
>>
>>

次のコマンドを使用して、jarファイルを生成できます。

$ mvnパッケージ

[情報]プロジェクトをスキャンしています...
[情報]
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報] helloworld1.0の構築-スナップショット
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]
[情報] --- maven-resources-plugin:2.6:resources(default-resources)@ helloworld ---
[警告]プラットフォームエンコーディング(実際にはUTF-8)を使用して、フィルタリングされたリソースをコピーします。
ビルドはプラットフォームに依存します!
[情報]存在しないresourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /をスキップします
helloworld / src / main / resources
[情報]
[情報] --- maven-compiler-plugin:3.1:compile(default-compile)@ helloworld ---
[情報]変更が検出されました-モジュールを再コンパイルします!
[警告]プラットフォームエンコーディングUTF-8を使用して、ファイルエンコーディングが設定されていません。つまり、ビルドは
プラットフォームに依存します!
[情報] 1つのソースファイルを/ Users / zak / _work / LearnBuildScripts / LearnMaven /にコンパイルしています
helloworld / target / classes
[情報]
[情報] --- maven-resources-plugin:2.6:testResources(default-testResources)@
こんにちは世界 - -
[警告]プラットフォームエンコーディング(実際にはUTF-8)を使用して、フィルタリングされたリソースをコピーします。
ビルドはプラットフォームに依存します!
[情報]存在しないresourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /をスキップします
helloworld / src / test / resources
[情報]
[情報] --- maven-compiler-plugin:3.1:testCompile(default-testCompile)@ helloworld ---
[情報]変更が検出されました-モジュールを再コンパイルします!
[警告]プラットフォームエンコーディングUTF-8を使用して、ファイルエンコーディングが設定されていません。つまり、ビルドは
プラットフォームに依存します!
[情報] 1つのソースファイルを/ Users / zak / _work / LearnBuildScripts / LearnMavenにコンパイルします
/ helloworld / target / test-classes
[情報]
[情報] --- maven-surefire-plugin:2.12.4:test(default-test)@ helloworld ---
[情報] Surefireレポートディレクトリ:/ Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
surefire-レポート

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
com.companyname.helloworld.AppTestを実行しています
テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.014秒

結果 :

テストの実行:1、失敗:0、エラー:0、スキップ:0

[情報]
[情報] --- maven-jar-plugin:2.4:jar(default-jar)@ helloworld ---
[情報] jarのビルド:/ Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.jar
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]成功を築く
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報]合計時間:5.624秒
[情報]終了日:2018-01-27T00:11:10-08:00
[情報]最終メモリ:16M / 114M
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------

次のようにjarファイルを実行できます。

$ java -cp target / helloworld-1.0-スナップショット。と。会社名こんにちは世界アプリ
こんにちは世界

jarファイルはターゲットフォルダに配置されます。

Gradle

Gradleは、AntとMavenのパワーを兼ね備えています。 Gradleの最初のバージョンは2012年にリリースされました。急速に採用されています。 Googleは現在AndroidOSで使用しています。

XMLの代わりに、GradleはGroovy言語を使用します。その結果、Gradleでのビルドスクリプトの作成と読み取りが簡単になります。当初は依存関係の管理にIvyを使用していましたが、現在は独自の依存関係エンジンを使用しています。

長所

  • 柔軟性を保ちながら標準化を提供
  • ビルドスクリプトの読み取りと書き込みが簡単
  • 依存関係の複数のバージョンの処理に優れています
  • 複数のプログラミング言語とテクノロジーを処理できる
  • ツールの開発を支援するアクティブなコミュニティ
  • Gradle DSL(ドメイン固有言語)により、シンプルな構成構造になります
  • Gradleは、インクリメンタル、ビルドキャッシュ、およびGradleデーモンを使用してパフォーマンスを向上させます

短所

  • IDE統合はMavenほど良くありません

Gradleの例

Gradleはからインストールできます ここ 。パスにGradleを設定したら、次の方法で確認できます。

$ gradle - バージョン

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

ビルド時間:2018年-01-24 17:04:52UTC
リビジョン:77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy:2.4.12
Ant:Apache Ant((TM)。2月にコンパイルされたバージョン1.9.92 2017年
JVM:1.8.0_74((オラクル株式会社25.74-b02)。
OS:Mac OS X 10.11.6 x86_64

次に、次のディレクトリ構造を作成します。

こんにちは世界
|-建てる。gradle
-src
|-主要
-java
-こんにちは世界
-こんにちは世界。java

helloworld.javaの場合、Antの例のコードを入力します。そして、build.gradleの場合、次のコードを入力します。

プラグインを適用する 「java」

バージョン= 「1.0」

リポジトリ{{
mavenCentral(()。
}

依存関係{{
testCompileグループ 「junit」、 名前 「junit」、 バージョン 「4.12」
}

gradleタスク–allコマンドを使用して、使用可能なすべてのコマンドを確認できます。 Gradleは、build.gradleファイルで指定したプラグインを自動的に取得し、プラグインによって利用可能な追加のタスクを表示します。

次のコマンドを実行してビルドを取得できます。

$ gradle jar

建てる 成功 1秒で
2実行可能なタスク:2実行された

あなたはこのようにあなたの瓶を動かすことができます:

$ java -cp build / libs / helloworld-1.0こんにちは世界
こんにちは世界

jarファイルはbuild / libsフォルダーに配置されます。

結論

ビルドツールの中で、Antは小規模なプロジェクトに役立ちますが、Mavenはすべての開発者が同じルールに従うようにするのに適しています。 Gradleは、最も柔軟性のある最新のツールです。

参照: