1

maven centralにpomファイルがあるivy.xmlに依存関係(Aと名付けましょう)を追加します。Ivy は、Maven の依存関係を解決するために ibiblio を使用します。ivy.xml に追加された依存関係 (A) には、推移的な依存関係 (B) があります。これまでのところ、ここまでは順調です。推移的な依存関係 (B) の依存関係 (C) は、ivy では解決できません。

A を ivy.xml で次のように定義しました。

<dependency org="Z" name="A" rev="0.6-SNAPSHOT" conf="*->default"/>

B の pom ファイルでは、C は以下のようにコンパイル スコープとテスト スコープの両方で定義されています。

<dependency>
      <groupId>X</groupId>
      <artifactId>C</artifactId>
    </dependency>
    <dependency>
      <groupId>X</groupId>
      <artifactId>C</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
</dependency>

Ivy のキャッシュ ファイル (~/.ivy2/cache/X/C/ivy-0.98.8-hadoop2.xml) で ivy によって解決される B の xml ファイルを見ると、次のようになります。

<dependency org="X" name="C" rev="0.98.8-hadoop2" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="X" name="C" rev="0.98.8-hadoop2" force="true" conf="test->runtime(*),master(*)">
  <artifact name="C" type="test-jar" ext="jar" conf="" m:classifier="tests"/>
</dependency>

このため、ivy は C スコープを正しく定義できません。記録として、pom ファイルはサード パーティのプロジェクトであるため、変更する権限がありません。どうすれば修正できますか?

4

1 に答える 1

1

Nutch プロジェクトの ivy の使用法を確認してお詫びしますが、次の理由から非常に複雑であるというのが私の結論です。

  • 「コンパイル」および「テスト」ターゲットは、解決タスクに対して個別の呼び出しを発行しています
  • 各プラグインは ivy resolve タスクも呼び出しています
  • クラスパスを維持するための複雑なロジック。cachepathタスクと ivy 構成を使用して簡素化できます。
  • ビルド プラグインは ivy によって管理されていません (ソナー、エクリプス、ラット)

ビルドのリファクタリングを開始しましたが、メインの Nutch アーティファクトとプラグインの関係を理解し​​ていないことに気付き、停止しなければなりませんでした... ( NUTCH-1515を見つけるのは難しい方法でした... 時間の無駄です。フィード プラグインには依存関係がありません)。

また、アイビーの削除を要求する問題NUTCH-1371にも気付きました。これは、現在のコードベースに大幅な変更を加えることなく、トリッキーなリファクタリングになります。各プラグインが独自の依存関係をリストするマルチモジュール ビルドである必要があると思います。

結論として、この作業はあなたの質問に答えるものではありませんが、少なくとも数時間の分析の結果を文書化する必要があると思いました:-) NUTCH-1371に照らして、あなたのプロジェクトが主要なツタのリファクタリングを許容するかどうかわかりませんか?

アイビーのリファクタリング

これまでに達成したことは次のとおりです。

利点:

  • すべての構成を示す単一のアイビー レポート (新しいivy-resolve ターゲット)
  • Ivy をインストールするための新しいメカニズム (新しいivy-install ターゲット)
  • クラスパスは ivy 構成を使用して管理されます (ivy キャッシュパス タスクの使用と ivy ファイル内の構成を参照しください)
  • Eclipse、ソナー、およびラットの ANT タスクは、ivy を使用して自動的にインストールされます (Eclipse プラグインは、パッケージ リゾルバーを使用して tar アーカイブから jar をダウンロードおよび抽出するため、注目に値します)。

次の Nutch の問題に影響します

  • NUTCH-1881 : この新しいアプローチは、resolve-test および resolve-default ターゲットを削除し、${build.lib.dir} の代わりに ivy を使用してクラスパスを管理します
  • NUTCH-1805 : 独自の依存関係を持つジョブ ターゲットの個別の構成を簡単にセットアップできます。
  • NUTCH-1755 : これは build.xml に名前を割り当てることで修正されると思います (参照: diff )
于 2015-01-02T01:49:05.627 に答える