1

ここでMavenにはまったく新しいので、最初に私がやろうとしていることを説明しましょう:

リポジトリに追加されない特定の JAR ファイルがあります。これは、これらがOracle ADFに固有であり、アプリケーション・サーバーにすでに配置されているためです。いつでもすべてのアプリで使用できるバージョンは 1 つだけです。ただし、コンパイルするには、これらをクラスパスに配置する必要があります。これらの JARS は多数あるため、ADF の新しいバージョンにアップグレードする場合は、すべてのアプリケーションを調べて、かなり冗長な依存関係を再定義する必要があります。繰り返しますが、私の目標は、これらの JAR をクラスパスに追加することです。これは、他の場所で実際に使用されるバージョンを制御するためです。

したがって、基本的には、特定のネットワーク ディレクトリ(開発者が変更する権限を持たない)内のすべての JAR を、コンパイル時に maven のクラスパスに追加するだけです。これらの JAR ファイルをリポジトリに配置する必要はありません。もちろん、これらの JAR は EAR/WAR にパッケージ化されません。

編集:

これらを企業レポに追加したくない他の理由の中で、次のことが挙げられます。

  1. これらの JAR は、他では使用されません。珍しく、オラクルだけに限定されたものはたくさんあります。
  2. 任意の時点で使用される特定の JAR のバージョンは 1 つだけです。アプリケーション A が 1.0 に依存し、アプリケーション B が 1.1 に依存することは決してありません。アプリ A と B は両方とも、1.1 または 1.2 のみに依存します。
  3. 100 以上のアプリケーションを維持する予定です。これは大量の pom.xml ファイルです。つまり、Oracle ADF をアップグレードするたびに、(人的エラーによって) 依存関係が正しく指定されていない場合、100 以上の pom.xml ファイルを編集するたびに、それぞれの間違いを修正する必要があります。アップグレードします。
4

3 に答える 3

3

次の 3 つのオプションが表示されます。

  1. 依存関係をリポジトリ (この回答で説明されているようにファイル リポジトリである可能性があります) に配置し、それらを scope で宣言しますprovided
  2. ダーティsystemスコープ トリックを使用します (つまり、システム スコープで依存関係を宣言し、ファイル システム内の jar へのパスを設定します。
  3. system#2の小さなバリエーション:すべてのjarを参照するMANIFEST.MFでjarを作成し(相対パスを使用)、スコープを使用してこのほとんど空のjarへの依存関係を宣言します。

きれいな方法はオプション#1ですが、あなたの場合は他の方法でも機能します。オプション #3 は、探しているものに最も近いようです。

更新:オプション#3を明確にする

と のディレクトリがあるa.jarとしb.jarます。次のように、他の jar のリストにエントリをc.jar含む を作成します。Class-PathMETA-INF/MANIFEST.MF

Class-Path: ./a.jar ./b.jar 

c次に、スコープを使用して POM で(および のみでc)依存関係を宣言しますsystem。他の jar は、POM で明示的にリストしなくても「表示」されます (もちろん、マニフェストで宣言する必要がありますが、これは非常に簡単です)。スクリプト)。

于 2010-04-20T18:30:51.120 に答える
1

ADF (おそらく 10g / 11g) コンポーネントを開発している場合は、JDeveloper を IDE として使用することになると思います。JDeveloperには非常に機能豊富なライブラリ管理ツールが付属しており、コンパイルに必要なライブラリやデプロイ用にパッケージ化する必要のあるライブラリを定義できます。プロジェクトにライブラリを追加する方法と、パッケージ化中にどのライブラリを選択する必要があるかを展開プロファイルで示す方法を既に知っていると思います。ライブラリを Maven から除外したい場合は、これが最善の方法かもしれません。JDeveloperには適切なバージョンのライブラリが付属しているため、このアプローチを使用すると、適切なライブラリが確実に得られます。

それにもかかわらず、maven を使用しているため、一部のライブラリを制御不能にし、maven リポジトリを保持することはお勧めしません。MavenとOracle JDeveloperのライブラリ管理のどちらかを選択することをお勧めします。現在のプロジェクトでは、JDeveloper ADF 11g (および WebCenter) を使用しており、Maven を使用しています。これにより、ライブラリ管理が簡単になります。結局のところ、maven で管理するのに便利な大量のサードパーティ ライブラリ (Apache、Spring など) があり、IDE でのコンパイルに実際に必要な Oracle ライブラリはそれほど多くありません ( API のものだけが必要であり、それらの実装は必要ありません)。私たちのアプローチは、必要なときにいつでも Oracle ライブラリを maven リポジトリに追加し、maven が依存関係管理全体を制御できるようにすることでした。

他の人が回答で言うように、依存関係をアーティファクトに含めたくない場合は、 <scope>provided</scope>. 開発環境を構成すると、maven が作業を行ってくれることに感謝し、依存関係の管理を (ほとんど) 忘れることができます。JDeveloper IDE ファイルをビルドするために、maven jdev プラグインを使用しているため、mvn jdev:jdevビルドによってプロジェクト ファイルが生成され、ライブラリやライブラリ間の依存関係が適切にコンパイルされるように設定されます。

更新しました:

もちろん、pom ファイルで ADF ライブラリを参照する必要があります。私たちのプロジェクトでは、ADF/WebCenter スタック全体ではなく、ADF タグ ライブラリや特定のサービスなど、各アプリケーションで使用されるものだけを参照します。この目的のために、「提供された」スコープを使用します。JDeveloper にライブラリの管理を任せることもできますが、100% JDeveloper ライブラリ アプローチまたは 100% Maven アプローチのいずれかを使用する方が簡単であることがわかりました。Maven アプローチを使用する場合、最初はローカル リポジトリをビルドするのに時間がかかりますが、それが完了すると、メンテナンスが非常に簡単になり、サイクル全体 (開発、ビルド、テスト、パッケージング、デプロイ) がより簡単になります。より一貫した構成を持つ。将来、新しい ADF バージョンに更新する必要があることは事実です。ただし、リポジトリ構造はすでに定義されているため、高速である必要があります。将来のアップグレードでは、ADF のバージョンを最上位の pom のプロパティとして保持することをお勧めします。これにより、新しいバージョンにすばやく切り替えることができます。

于 2010-04-24T09:27:58.870 に答える
1

リポジトリに入れたくないことを明示的に述べましたが、その理由は正当化されません。これが私の提案です:

  • これらの jar をリポジトリにインストールします
  • それらを Maven の依存関係として追加します<scope>provided</scope>。これは、それらがランタイム (アプリケーション サーバー) によって提供され、アーティファクト (war/ear) に含まれないことを意味します。

この類似の質問を確認してください

Maven を広く使用している組織には、独自のリポジトリを用意することをお勧めします。ネクサスが見えます。次に、これらの jar をリポジトリにインストールすると、各ローカル リポジトリだけに jar を配置するのではなく、すべての開発者がそれらを使用できるようになります。

(「最も醜い」オプションは、maven をまったく使用せず、jar を相対的な場所に置き、それらをプロジェクトのクラスパスに追加して、クラスパス プロパティ ファイルを送信することです (IDE によって異なります))。

于 2010-04-20T18:25:19.633 に答える