5

私たちのMavenプロジェクトでは、次のディレクトリ構造を試しています(合計で約80のプロジェクトがあり、アイデアが得られるようにいくつかしか表示されていません)。

myappli      (pom)
-- module1       (pom)
--|-- utils    (pom)
--|-- ejb       (pom)
--|--|-- myappli-module1-a-ejb    (jar)
--|--|-- myappli-module1-b-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)
...
-- module6       (pom)
--|-- utils       (pom)
--|-- ejb       (pom)
--|--|-- myappli-module6-c-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)

注:リーフ以外のすべてのプロジェクトの値は「pom」であるため、これはMavenのフラットな構造です。packaging(BetterBuildsWithMavenの本を参照)。

依存関係のバージョンは、 " dependencyManagement"、" myappli"pomで定義します。これは正常に機能します。

私たちの問題は、依存関係自体の再利用にあります。たとえば、ejbの依存関係は、すべてのejbプロジェクトに共通です(設計による)。カットアンドペーストはしたくありません。変更するたびにすべてを維持します。

ejbの依存関係に「インポートの概念」を使用し、アプリケーションレベルでejbの依存関係を一度定義することを考えていました。失敗した試みは次のとおりです。

  • Maven " parent pom"の概念は問題ありませんが、モジュールですでに使用されているため、要件に対応できません。
  • Mavenにインポート機能が見つかりません(dependencyManagementを除く)
  • XMLエンティティ定義が認識されません。次のようなpomを試しましたが、エラー
    " Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'":

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project [
    <!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
    ]>
    <project ...
    .....。
    &ejbDependencies;
    _


編集済み:Robertが提案した解決策を試していますが、何か問題があります。

ejbプロジェクトをコンパイルすると、依存関係自体が見つかりません。コンパイル(mvn compile)時に、javax.ejbパッケージが見つからないというエラーが発生します。

注:以前、依存関係プロジェクトで「mvninstall」を実行しました。

これは私の構成です:

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-maven</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-maven-ejb</artifactId>
  <version>${myproj-version}</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.ejb</groupId>
      <artifactId>ejb</artifactId>
    </dependency>

    <dependency>
      <groupId>ojdbc</groupId>
      <artifactId>ojdbc</artifactId>
    </dependency>
  </dependencies>
</project>

---------------------------------
<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-identite-ejb</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-identite-metier</artifactId>
  <name>SNR IDENTITE METIER</name>
  <version>2.0.1</version>
  <packaging>ejb</packaging>

  <dependencies>
    <dependency>
      <groupId>com.company</groupId>
      <artifactId>myproj-maven-ejb</artifactId>
      <version>${myproj-version}</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

それが何かを変えるかどうかはわかりませんが、2つのpomを関連付ける階層があります。
厳密なMaven構造があり、各ディレクトリはすべてのサブディレクトリをMavenモジュールとして宣言し、各サブディレクトリは親をMavenの親として宣言します。
そして、共通の親ディレクトリはこの構造の一部です。

+---maven
|   \---ejb
+---identite
|   +---ejb
|   |   \---SNR_IDENTITE_METIER

編集済み

リーフの答えは正しいようです。私たちの依存関係が提供されており、したがって推移的ではないため、Mavenで行うことは不可能です:-(

Mavenのセットアップには本当に多くの問題があります。非常に多くの小さなことがうまくいきません。今日、サイトターゲットは、バージョン番号に使用しているプロパティを処理できないことがわかりました。

4

2 に答える 2

9

pom依存関係を使用して、依存関係を任意のプロジェクトにインポートできます。

pomプロジェクトは次のようになります。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
  </dependencies>
</project>

そして、次のようにインポートされます。

<dependency>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <type>pom</type>
</dependency>

詳細については、Maven、最も信頼のおけるガイド-依存関係のグループ化を参照してください。

于 2009-09-02T11:52:00.910 に答える
2

インポートした依存関係にスコープがありますか?実際、このスコープは推移的ではありません(Maven依存関係スコープを参照)。

これが非交換の理由である可能性があります。

于 2009-09-03T14:06:01.300 に答える