AntとMavenの違い[終了]


180

AntとMavenの違いを誰かに教えてもらえますか?私も使ったことがありません。Javaプロジェクトのビルドを自動化するために使用されていることは理解していますが、どこから始めればよいかわかりません。


4
回答はMavenの支持者によって支配されているため、少しバランスをとりたいと思います。例については、この答えを参照してくださいstackoverflow.com/questions/1306579/...
ペトルGladkikh

4
これは、AntとMavenを比較するという質問には直接回答しませんが、私の入力は、Gradleを使用することです。これにより、AntとMavenの両方に同時にアクセスできます。gradle.org

回答:


218

Maven:Definitive Guideの、私は、セクションのタイトルが導入におけるMavenとAntの違いについて書いた「AntとMavenの相違点」。これは、その紹介の情報といくつかの追加メモを組み合わせた回答です。

簡単な比較

これは、最も基本的なレベルでMavenに組み込みの規則があるという考えを説明するためだけに示しています。簡単なAntビルドファイルを次に示します。

<project name="my-project" default="dist" basedir=".">
    <description>
        simple example build file
    </description>   
    <!-- set global properties for this build -->   
    <property name="src" location="src/main/java"/>
    <property name="build" location="target/classes"/>
    <property name="dist"  location="target"/>

    <target name="init">
      <!-- Create the time stamp -->
      <tstamp/>
      <!-- Create the build directory structure used by compile -->
      <mkdir dir="${build}"/>   
    </target>

    <target name="compile" depends="init"
        description="compile the source " >
      <!-- Compile the java code from ${src} into ${build} -->
      <javac srcdir="${src}" destdir="${build}"/>  
    </target>

    <target name="dist" depends="compile"
        description="generate the distribution" >
      <!-- Create the distribution directory -->
      <mkdir dir="${dist}/lib"/>

      <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file
-->
      <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
   </target>

   <target name="clean"
        description="clean up" >
     <!-- Delete the ${build} and ${dist} directory trees -->
     <delete dir="${build}"/>
     <delete dir="${dist}"/>
   </target>
 </project>

この単純なAntの例では、Antに正確に何をすべきかを伝える方法を見ることができます。src / main / javaディレクトリ内のソースをtarget / classesディレクトリにコンパイルするjavacタスクを含むコンパイル目標があります。Antにソースの正確な場所、結果のバイトコードを保存する場所、およびこれをすべてJARファイルにパッケージ化する方法を伝える必要があります。Antの手続き性を低下させるのに役立つ最近の開発がいくつかありますが、開発者のAntでの経験は、XMLで書かれた手続き型言語のコーディングにあります。

前のAntの例をMavenの例と比較してください。Mavenでは、JavaソースからJARファイルを作成するために、単純なpom.xmlを作成し、ソースコードを$ {basedir} / src / main / javaに配置して、コマンドラインからmvn installを実行するだけです。 。同じ結果を実現するMaven pom.xmlの例。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
</project>

pom.xmlに必要なのはこれだけです。コマンドラインからmvn installを実行すると、リソースの処理、ソースのコンパイル、単体テストの実行、JARの作成、ローカルリポジトリへのJARのインストールが行われ、他のプロジェクトで再利用できます。変更しなくても、mvn siteを実行して、JavaDocへのリンクとソースコードに関するいくつかのレポートを含むtarget / siteでindex.htmlファイルを見つけることができます。

確かに、これは可能な限り単純なサンプルプロジェクトです。ソースコードのみを含み、JARを生成するプロジェクト。Maven規約に準拠し、依存関係やカスタマイズを必要としないプロジェクト。動作のカスタマイズを開始したい場合、pom.xmlのサイズが大きくなり、最大のプロジェクトでは、プラグインのカスタマイズと依存関係の宣言を多く含む非常に複雑なMaven POMのコレクションを確認できます。ただし、プロジェクトのPOMファイルがさらに大きくなった場合でも、Antを使用した同様のサイズのプロジェクトのビルドファイルとはまったく異なる種類の情報を保持します。Maven POMには、「これはJARプロジェクトです」、「ソースコードはsrc / main / javaにあります」という宣言が含まれています。Antビルドファイルには明示的な指示が含まれています:「これはプロジェクトです」、「src/main/java"、" javacこのディレクトリに対して実行する "、"結果を "に入れるtarget/classses、" ...からJARを作成する "など。Antがプロセスについて明示的である必要がある場合、Mavenに何かが組み込まれていました。これは、ソースコードの場所と処理方法を知っているだけです。

高レベルの比較

この例でのAntとMavenの違いは何ですか?蟻...

  • には、一般的なプロジェクトディレクトリ構造のような正式な規則はありません。Antにソースを見つける場所と出力を置く場所を正確に指示する必要があります。非公式の慣習は時間の経過とともに出現しましたが、それらは製品に体系化されていません。
  • 手続き型であるため、Antに何をいつ実行するかを正確に伝える必要があります。コンパイルしてからコピーして圧縮するように指示する必要がありました。
  • ライフサイクルがないため、目標と目標の依存関係を定義する必要がありました。タスクのシーケンスを各目標に手動でアタッチする必要がありました。

どこMaven ...

  • 規約がありますが、規約にしたがったため、ソースコードがどこにあるかはすでにわかっていました。バイトコードをtarget / classesに置き、ターゲットにJARファイルを生成しました。
  • 宣言的です。必要なのは、pom.xmlファイルを作成して、ソースをデフォルトのディレクトリに配置することだけでした。残りはMavenが処理しました。
  • を実行すると呼び出されるライフサイクルがありますmvn install。このコマンドは、ライフサイクルに達するまで一連のシーケンスステップを実行するようMavenに指示しました。このライフサイクルの旅の副作用として、Mavenは、JARのコンパイルや作成などを行うデフォルトのプラグイン目標をいくつか実行しました。

アイビーはどうですか?

そうです、スティーブ・ローランのような誰かがその比較を読んでファウルと呼ぶでしょう。彼は、答えがIvyと呼ばれるものを完全に無視する方法と、AntがAntのより新しいリリースでビルドロジックを再利用できるという事実について話します。これは本当です。Ant + antlibs + Ivyを使用している賢い人がたくさんいる場合、うまく機能するようにうまく設計されたビルドになります。Mavenが理にかなっていると確信していますが、非常に鋭いビルドエンジニアがいるプロジェクトチームでAnt + Ivyを喜んで使用します。そうは言っても、Jettyプラグインなどの多くの貴重なプラグインを見逃してしまうことになると思いますし、時間の経過に伴って行う必要のなかった一連の作業を行うことになるでしょう。

Maven対Antよりも重要

  1. リポジトリマネージャを使用して、ソフトウェアアーティファクトを追跡することです。Nexusダウンロードすることをお勧めします。Nexusを使用してリモートリポジトリをプロキシし、チームが内部のアーティファクトをデプロイする場所を提供できます。
  2. ソフトウェアコンポーネントが適切にモジュール化されている。1つの大きなモノリシックコンポーネントが時間の経過とともに拡張することはめったにありません。プロジェクトが発展するにつれて、モジュールとサブモジュールの概念が必要になります。Mavenはこのアプローチに非常に適しています。
  3. ビルドにはいくつかの規則を採用します。Antを使用する場合でも、他のプロジェクトと整合性のある何らかの形式の規則を採用するよう努めるべきです。プロジェクトがMavenを使用する場合、Mavenに精通している人なら誰でもビルドを取得して、構成をいじる必要なく、ビルドを実行することができます。

1
リンクは再び壊れます。
Thunderforge 2014

1
私はNebeansを使用し、Antはデフォルトでチューニングなしで動作します(Netbeansの規則?)。現在、Mavenを試してみて、最初のビルド中、およびインターネット接続を常に使用しているときに、Mavenが長くなるのを発見しました。オフラインでのビルドはおそらく不可能です。これは不快です。
Zon 2015

113

Mavenはフレームワーク、Antはツールボックスです

Mavenは組み立て済みのロードカーですが、Antは自動車部品のセットです。Antを使用すると、自分の車を作成する必要がありますが、少なくともオフロード走行を行う必要がある場合は、適切なタイプの車を作成できます。

別の言い方をすれば、Mavenはフレームワークであり、Antはツールボックスです。フレームワークの範囲内での作業に満足している場合は、Mavenで十分です。私にとっての問題は、私がフレームワークの境界にぶつかり続けて、それが私を出させないことでした。

XMLの冗長性

tobrienはMavenについてよく知っている人で、私は彼が2つの製品の非常に優れた、正直な比較を提供したと思います。彼は単純なMaven pom.xmlを単純なAntビルドファイルと比較し、Mavenプロジェクトがいかに複雑になるかについて言及しました。単純な実際のプロジェクトで見られる可能性が高いいくつかのファイルの比較を見てみる価値があると思います。以下のファイルは、マルチモジュールビルドの単一モジュールを表しています。

まず、Mavenファイル:

<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-4_0_0.xsd">

    <parent>
        <groupId>com.mycompany</groupId>
        <artifactId>app-parent</artifactId>
        <version>1.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>persist</artifactId>
    <name>Persistence Layer</name>

    <dependencies>

        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>common</artifactId>
            <scope>compile</scope>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>domain</artifactId>
            <scope>provided</scope>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>${hibernate.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>${spring.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.dbunit</groupId>
            <artifactId>dbunit</artifactId>
            <version>2.2.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
            <classifier>jdk15</classifier>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>${commons-dbcp.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>${oracle-jdbc.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>${easymock.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

そして同等のAntファイル:

<project name="persist" >

    <import file="../build/common-build.xml" />


    <path id="compile.classpath.main">
        <pathelement location="${common.jar}" />
        <pathelement location="${domain.jar}" />
        <pathelement location="${hibernate.jar}" />
        <pathelement location="${commons-lang.jar}" />
        <pathelement location="${spring.jar}" />
    </path>


    <path id="compile.classpath.test">
        <pathelement location="${classes.dir.main}" />
        <pathelement location="${testng.jar}" />
        <pathelement location="${dbunit.jar}" />
        <pathelement location="${easymock.jar}" />
        <pathelement location="${commons-dbcp.jar}" />
        <pathelement location="${oracle-jdbc.jar}" />
        <path refid="compile.classpath.main" />
    </path>


    <path id="runtime.classpath.test">
        <pathelement location="${classes.dir.test}" />
        <path refid="compile.classpath.test" />
    </path>


</project>

tobrienは彼の例を使用して、Mavenに組み込みの規則があることを示しましたが、必ずしもXMLの記述が少なくなるとは限りません。私はその反対が真実であることを発見しました。pom.xmlは、build.xmlの3倍の長さであり、規則から逸脱することはありません。実際、私のMavenの例は、プラグインの構成に必要な追加の54行なしで示されています。そのpom.xmlは単純なプロジェクト用です。追加の要件を追加し始めると、XMLは実際に大幅に成長し始めます。これは、多くのプロジェクトでは通常のことです。

しかし、あなたはAntに何をすべきかを伝えなければなりません

上記の私のAntの例はもちろん完全ではありません。クリーンアップ、コンパイル、テストなどに使用するターゲットを定義する必要があります。これらは、マルチモジュールプロジェクトのすべてのモジュールによってインポートされる共通のビルドファイルで定義されます。これは、Mavenでは宣言型であるのに対し、Antでこれらすべてを明示的に記述する必要があるという点に私を導きます。

確かに、これらのAntターゲットを明示的に記述する必要がない場合は、時間を節約できます。しかし、どのくらいの時間ですか?現在使用している一般的なビルドファイルは、5年前に作成したもので、それ以降は少しだけ改良されています。Mavenでの2年間の実験の後、古いAntビルドファイルをクローゼットから引き出して、ほこりを払い、作業に戻しました。私にとって、Antに明確に何をすべきかを伝える必要があるため、5年間で1週間足らずでした。

複雑

次に触れておきたい主な違いは、複雑さとそれがもたらす実際の効果の違いです。Mavenは、ビルドプロセスの作成と管理を担当する開発者の作業負荷を軽減することを目的として構築されました。これを行うには、複雑にする必要があります。残念ながら、その複雑さは意図した目標を否定する傾向があります。

Antと比較すると、Mavenプロジェクトのビルド担当者はより多くの時間を費やします。

  • ドキュメントの読み方:Mavenには、学習する必要のあるドキュメントがはるかに多いため、ドキュメントがはるかに多くなります。
  • チームメンバーの教育:自分で答えを見つけようとするよりも、知っている人に質問する方が簡単だと感じます。
  • ビルドのトラブルシューティング:Mavenは、Antよりも信頼性が低く、特に非コアプラグインです。また、Mavenビルドは繰り返し可能ではありません。プラグインのスナップショットバージョンに依存している可能性が高い場合、何も変更しなくてもビルドが壊れる可能性があります。
  • Mavenプラグインの作成:プラグインは通常、特定のタスクを念頭に置いて作成されます。たとえば、webstartバンドルを作成すると、プラグインを他のタスクに再利用したり、組み合わせて目標を達成したりすることが難しくなります。そのため、既存のプラグインセットのギャップを回避するには、独自のプラグインを作成する必要がある場合があります。

対照的に:

  • Antのドキュメントは簡潔で包括的で、すべて1か所にあります。
  • Antは単純です。Antを学習しようとする新しい開発者は、知っておく必要がある残りの部分を理解できるようにするために、いくつかの単純な概念(ターゲット、タスク、依存関係、プロパティ)を理解するだけで済みます。
  • Antは信頼できます。Antはすでに機能しているため、過去数年間、Antのリリースはそれほど多くありません。
  • Antビルドは通常、オンラインリポジトリ、実験的なサードパーティプラグインなどの外部依存関係なしで作成されるため、反復可能です。
  • Antは包括的です。ツールボックスであるため、ツールを組み合わせてほぼすべてのタスクを実行できます。独自のカスタムタスクを作成する必要がある場合は、非常に簡単です。

親しみやすさ

もう1つの違いは、親しみやすさの違いです。新しい開発者は、速度を上げるために常に時間を必要とします。既存の製品に精通していることがその点で役立ち、MavenサポーターはこれがMavenの利点であると正しく主張します。もちろん、Antの柔軟性は、好きな規則を作成できることを意味します。したがって、私が使用する規則は、ソースファイルをsrc / main / javaというディレクトリ名に置くことです。コンパイルしたクラスは、target / classesという名前のディレクトリに移動します。おなじみの音はそれではありません。

Mavenで使用されるディレクトリ構造が好きです。それは理にかなっていると思います。また、ビルドライフサイクル。したがって、私はAntビルドで同じ規則を使用します。それが理にかなっているだけでなく、以前にMavenを使用したことがある人なら誰でも知っているからです。


7
Mavenからアイデアを「盗み」、それらをAntビルドに適用して、一般的な規則に従い、他の人のために移行を容易にする方法が本当に好きです。
IgorČordaš2014

pom.xmlsの膨張を回避するために、XSLTを介してそれらのほとんどを生成します。
デミ

21

Antは主にビルド​​ツールです。

Mavenは、プロジェクトおよび依存関係管理ツールです(もちろん、プロジェクトもビルドします)。

Ant + Ivyは、Mavenを回避したい場合は、かなり良い組み合わせです。


この。Ant + IvyとMaven2の比較はこちら:ant.apache.org/ivy/m2comparison.html
Esko

なぜMavenを避けたいのですか?私の経験では、MavenはJava開発の数少ない部分の1つであり、快適です。
ベンソン

4
@ベンソン:それは物議を醸す問題です。それが特効薬であれば、誰もがそれを使用するでしょう。
cherouvim 2009

18

さらにいくつかの違いをリストするために:

  • Antには正式な規則はありません。ソースを見つける場所、出力を配置する場所などをAntに正確に伝える必要があります。
  • Antは手続き型です。Antに何をすべきかを正確に伝える必要があります。コンパイル、コピー、圧縮などを行うように指示します。
  • Antにはライフサイクルがありません。
  • Mavenは規約を使用します。これらの規則に従う限り、ソースコードが自動的にどこにあるかを認識します。Mavenにどこにあるかを伝える必要はありません。
  • Mavenは宣言型です。必要なのは、pom.xmlファイルを作成して、ソースをデフォルトのディレクトリに配置することだけです。残りはMavenが処理します。
  • Mavenにはライフサイクルがあります。mvn installを呼び出すだけで、一連のシーケンスステップが実行されます。
  • Mavenには、一般的なプロジェクトタスクに関する情報があります。テストを実行するには、ファイルがデフォルトの場所にある限り、単純にmvn testを実行します。Antでは、まずJUnit JARファイルが必要です。次に、JUnit JARを含むクラスパスを作成し、Antにテストソースコードを探す場所を伝え、テストソースをコンパイルする目標を記述して、最後にユニットテストを実行します。 JUnitで。

更新:

これはMaven:The Definitive Guideからのものです。すみません、引用するのをすっかり忘れていました。


それは駄洒落でしたか?
vakio 2016年

1
@vakio-「引用」ではなく「サイト」を使用したので、私はあなたが意味していると思いますか?それは私の部分では完全に悪い綴りでした、そして私はそれを修正しました
アスカロニアン

17

MavenまたはAnt?これは非常によく似た質問で、質問への回答に役立ちます。

Mavenとは何ですか?公式サイトで。

編集:新規/グリーンフィールドプロジェクトの場合は、Mavenを使用することをお勧めします。「設定より規約」を使用すると、ビルドスクリプトとデプロイメントスクリプトの記述と設定にかかる時間をかなり節約できます。antを使用すると、ビルドスクリプトは時間の経過とともに複雑さを増す傾向があります。既存のプロジェクトの場合、構成/レイアウトをMavenシステムに組み込むのは難しい場合があります。


Mavenを使用すると、プロジェクトの開始時に時間を節約できますが、時間の経過とともに、非常に単純なプロジェクト以外のものがあれば、MavenスクリプトはAntの同等のスクリプトよりもはるかに複雑になります。たとえば、Maven Assemblyプラグインを見てください。
Kevin Stembridge、2009年

アセンブリプラグインが行うことを達成することは、Maven形式(アセンブリのモデルをxml形式でレイアウトする場所)で行う方が、Antで手動の手順をすべて実行するよりもはるかに簡単ですが、YMMV
matt b

こんにちはマット、アセンブリプラグインの学習曲線は、Ant tarまたはzipタスクの学習曲線よりも急です。ディスクリプタのフォーマットは150行程度で、直感的でない構成オプションが多数含まれています。その上、それは機能しません!Assemblyプラグインをあきらめた時点で、unpackでのフィルタリングは機能せず、ファイルモードオプションも機能せず、crcrlfを修正できませんでした。「Antのすべての手動ステップ」の意味がわからない。約5分かけてAntに、アセンブリプラグインで実行できなかった処理を数時間で実行させました。
Kevin Stembridge、2009年

3
最初のリンクは現在死んでいます:/
Matt Clark

15

Mavenは、依存関係管理ツール(中央リポジトリまたは設定したリポジトリからjarを取得するために使用できる)と宣言型ビルドツールの両方として機能します。「宣言的」ビルドツールと、antやmakeなどの従来のツールとの違いは、実行する方法ではなく、実行する必要があるものを構成することです。たとえば、プロジェクトをWARファイルとしてパッケージ化する必要があるとMavenスクリプトで言うことができ、Mavenはその処理方法を知っています。

Mavenは、その「宣言性」を実現するために、プロジェクトディレクトリがどのようにレイアウトされるかについての規則に依存しています。たとえば、メインコードを配置する場所、web.xml、ユニットテストなどを配置する場所に関する規則がありますが、必要に応じてそれらを変更することもできます。

また、maven内からantコマンドを実行するためのプラグインがあることにも注意してください。

http://maven.apache.org/plugins/maven-ant-plugin/

また、mavenのアーキタイプは、プロジェクトの開始を非常に高速にします。たとえば、Wicketアーキタイプがあります。これは、実行可能なhello worldタイプのプロジェクト全体を取得するために実行するMavenコマンドを提供します。

https://wicket.apache.org/start/quickstart.html


11

Antを見たことがない人を連れて行くことができます-そのbuild.xmlsはかなりよく書かれていて-彼らは何が起こっているのかを理解できます。同じ人物を連れてMaven POMを見せれば、彼らは何が起こっているのかまったくわかりません。

巨大なエンジニアリング組織では、Antファイルが大きくなり、管理できなくなると人々は書いています。これらのタイプクリーンなAntスクリプトを作成しました。これは、今後何をする必要があるのか​​を事前に理解し、3年以上の変化に対応できるテンプレートセットを設計することです。

単純なプロジェクトでない限り、Mavenの慣習や、Mavenで物事を成し遂げる方法を学ぶのはかなりの作業です。

結局のところ、AntまたはMavenを使用したプロジェクトの開始を要因と見なすことはできません。これは、実際には総所有コストです。組織がビルドシステムを数年にわたって維持および拡張するために必要なことは、考慮しなければならない主な要因の1つです。

ビルドシステムの最も重要な側面は、依存関係の管理と、ビルドレシピを表現する際の柔軟性です。うまくやれば、直感的だと思います。


6

それはプロジェクトのサイズに依存すると思います...個人的には、コンパイル、パッケージ化、およびデプロイメントが単純である必要がある単純なプロジェクトには、Mavenを使用します。もっと複雑なこと(多くの依存関係、マッピングファイルの作成など)が必要になるとすぐに、Antに切り替えます...


同意しません。単純なプロジェクトにMavenを使用するのは良いことだと私は同意しますが、複雑さが増すと、Mavenを使用することによるメリットが桁違いに増えると私は主張します。
ベンソン

私も同意しません。多くの相互に関連するモジュールを備えたより複雑なシステムがある場合、Mavenは本当にうまく機能し始めます。機能テストを記述し、レポートを実行し、成果物をリポジトリー・マネージャーにデプロイする必要がある場合、なぜAntを使用してそれらすべてを行うのですか?
ティム・オブライエン

Mavenは単純なプロジェクトには問題ありませんが、より複雑なプロジェクトでは単純なことをしようとするときに悪夢がありました。たとえば、配布可能なパッケージの作成、コードの難読化、webstartバンドルの作成、プロファイルの構成。@Benson、プロジェクトが複雑になるにつれて、Mavenはボールアンドチェーンになります。Antのパワーと柔軟性により、Mavenよりも生産性が向上します。@ tobrien、Antはマルチモジュールプロジェクト、機能テストの作成などで問題なく機能します。Mavenでのデフォルト以外のレポートプラグインの構成は、通常、Antの同等の機能よりも詳細です。
Kevin Stembridge、2009年

mavenを既存のプロジェクトに追加し始めたところ、期待どおりに動作しないことがわかりました。Webサイトはphpで構築されており、スクリプトを使用してデプロイされます。これらはMavenではスムーズに動作しません。動作させるには、非常に奇妙なことを行う必要があります。
Raul Luna

4

Mavenには、一般的に使用されるオープンソースプロジェクトの大規模なリポジトリも含まれています。ビルド中に、Mavenはこれらの依存関係(および依存関係の依存関係:)をダウンロードして、プロジェクトのビルドのこの部分をもう少し管理しやすくします。


2
+ 1、Central Mavenリポジトリーの稼働を維持するために必要なことを理解したので、私は注意を払って、MavenやIvyなどを使用しているすべての人にリポジトリー・マネージャーのインストールを検討するよう提案する必要があります。どちらでもかまいませんが、Nexus nexus.sonatype.orgは好きです。
Tim O'Brien
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.