2

タイトルの通り、主にJavaプロジェクトの依存関係解決に使っているIvyについてです。Ivy をセットアップしたばかりなので、すべてを把握していない可能性があります。

ここに私の問題があります: B、C、D、E などに依存するモジュール A があるとしましょう。モジュール A を共有リポジトリに簡単に公開できることはわかっています。それはうまくいきます。私が望むのは、モジュール A が依存するすべてのモジュールを Ivy が公開リポジトリから共有リポジトリにコピーすることです。タスクを確認しましたがivy:install、これはまさに私が望んでいるものではありません (または、それがどのように機能するかを誤解している可能性があります)。は次のように述べています。

<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/>

および属性は必須でfromありto、例から、既知のリポジトリ内にあり、特定のリビジョンを持つ 1 つの依存関係に対して機能すると思います。そして、すべての依存関係を個別に明示的にインストールする ANT タスクを作成する必要があります。

私が必要としているのは、アイビーに伝えることです - 解決を実行する - 見つかったすべての依存関係を名前、リビジョンが発見されたソースリポジトリから共有リポジトリに公開/インストールします

したがって、to属性は理にかなっている可能性があります。おそらくconf属性ですがname、ではrevisionありませんfrom

だから、私は次のようなタスクを探しています

<ivy:install to="shared"/>

これにより、すべての依存関係 (依存モジュール自体を除く) が共有リポジトリに一時的にインストールされるため、インターネットに接続していない場合やパブリック リポジトリが閉じている場合でもビルドできます。

4

2 に答える 2

3

これは最善の解決策ではありませんが、おそらくうまくいくのは 2 つのリポジトリを使用することです。

最初のリポジトリを使用してモジュール A を公開し、次に ivy を使用して A とそのすべての依存関係を 2 番目のリポジトリにコピーします。このために、installタスクを使用できます。from属性では、最初のリポジトリとパブリック リポジトリの両方を指すチェーン リゾルバtoを指定し、属性では共有リポジトリを指定します。

私はそのようなセットアップで Ivy を使用したことはありませんが、installすべての推移的な依存関係を含むアーティファクトをパブリック リポジトリから独自のリポジトリにコピーするために使用しているため、これが機能しない理由がわかりません。

于 2013-02-15T17:39:22.147 に答える
2

これはフィリップの答えと私の読めないコメントに基づいています。いくつか例を挙げたいと思います。build-ivy.xml私は常に各プロジェクトに含める共通点を持っていますbuild.xml。この一般的なビルドスクリプトには、共有リポジトリへの依存関係を含むモジュールをインストールするために必要な次のタスクが含まれています。

これにより、ivy.xmlが読み取られ、変数にデータが入力されます。

<target name="init">
    <ivy:settings file="${env.IVY_SETTINGS}/ivysettings.xml"/>
    <ivy:info/>
</target>

次のタスクは、自分で実装する必要のある、クリーンアップ、コンパイル、パッケージ化などのさまざまなタスクに依存します。

<target depends="init,clean-build,clean-dist,dist,package-doc,package-sources" name="publish-local">
    <ivy:resolve/>
    <ivy:publish status="release" resolver="local" overwrite="true" >
        <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

このタスクは、依存関係を含む現在のモジュールを推移的に共有リポジトリにインストールします。

<target name="install" depends="publish-local">
    <ivy:install module="${ivy.module}" from="local" to="shared" organisation="${ivy.organisation}" revision="${ivy.revision}" overwrite="true" transitive="true"/>
</target>
于 2013-02-18T17:43:46.380 に答える