web-dev-qa-db-ja.com

POMをMavenの依存関係として使用する方法は?

pom型の依存関係をPOMに追加し、そのすべてのモジュールを取得する方法はありますか?

JavaMail は良い例です。 Maven Central Repoには、 com.Sun.mail:all:1.5. というモジュールの親POMがあります。モジュールは、mail、mailapi、mailapijar、smtp、imap、gimap、pop3、およびdsnです。

ただし、「すべて」のアーティファクトには1つのファイルしかありません:pom.xmlこの「すべて」のアーティファクトをPOMへの依存関係として追加し、そのすべてのモジュールを取得する方法はありますか?これがMavenで依存関係を使用する正しい方法ではないことは90%確信していますが、The Stackの専門家から聞いてみたいと思います。

アイデア:

  • <dependencies><dependency>...<type>pom</type></dependency></dependencies>
  • <dependencyManagement><dependencies><dependency>...<type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

関連: Netbeans:pomタイプのMaven依存関係

30
kevinarpe

簡単な答え:Mavenでこれを行うことはできません。

他の答えは、「すべて」のPOMのみを依存関係にします。問題を解決しません。別の答えは、「すべて」のPOMの依存関係をインポートしようとします。依存関係は必要ありません。 「すべて」のPOMの(子)モジュールが必要です。繰り返しますが、問題は解決しません。

サイドノート:JavaMailライブラリを誤って使用していました。私は1つの依存関係を追加する必要がありました: com.Sun.mail:javax.mail:1.5.

4
kevinarpe

あなたは一緒に行かなければなりません

<dependencies>
  <dependency>
     <groupId>com.my</groupId>
     <artifactId>commons-deps</artifactId>
     <type>pom</type>
  </dependency>
</dependencies>

これにより、com.my:commons-depsで宣言されたすべての依存関係が現在のPOMに推移的に追加されます。

を使用して

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

依存関係管理の成果物バージョンの単純な「インクルード」として機能します。したがって、プロジェクトに依存関係は追加されません。

50

必要な依存関係を集約する独自のPOMを作成してから、元のプロジェクトでその集約pomに依存関係を追加できると思います。依存関係POMの各モジュールに依存関係を追加する必要がありますが、実際のプロジェクトPOMから抽象化され、それらの依存関係を1か所で管理できます。これは、依存する複数のプロジェクトがある場合に役立ちますその依存関係のセット。

この例では、次のような新しいPOMを作成できます。

<?xml version="1.0" encoding="UTF-8"?>
<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-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>mail-deps</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>mailapi</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>mailapijar</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>imap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>gimap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>pop3</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.Sun.mail</groupId>
            <artifactId>dsn</artifactId>
            <version>1.5.0</version>
        </dependency>
    </dependencies>
</project>

次に、元のプロジェクトに次を追加します。

<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-v4_0_0.xsd">
 ...
 <modules>
   <module>src/main/Java/com/mycompany</module>
 </modules>
 ...
 <dependencies>
     <dependency>
         <groupId>com.mycompany</groupId>
         <artifactId>mail-deps</artifactId>
         <version>1.0.0</version>
         <type>pom</type>
     </dependency>
 </dependencies>
</project>
9
Chris Messina

インポートしようとしているPOMに<dependencies/>セクションで定義された依存関係が含まれており、それらすべてをインポートする場合は、以下のコードを試すことができます。

免責事項:私はこれをしばらくしていない):あなたの<dependencyManagement/>セクションに、次のようなpom依存関係を追加します。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>kung.fu<groupId>
            <artifactId>ninja</artifactId>
            <version>1.2.3</version>
            <scope>import</scope>
            <type>pom</type> <!-- Not too sure if you needed this
                                  when it's scoped as import,
                                  but just in case -->
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies/>ビットを必要としない<dependencyManagement/>セクションで直接依存関係を定義する場合もありますが、思い出す限り、示されているようにimportのスコープにする必要があります上記。

1
carlspring

すでに上に書いたように:あなたはそれができません。しかし、これは私がやったことであり、うまくいきました。次のようなpomファイル(例ではJavaMail)があると仮定します。

<type>pom</type>
<dependencyManagement><dependencies><dependency></dependencyManagement>

そして、あなたはこのpomで言及されたすべてのjarをどこかにコピーしたいです。これは私がやったことであり、高速動作のソリューションです
元のPOMを開き、すべてのdependenciesセクションを元のPOMファイルから新しいPOMにそのままコピーアンドペーストします。もちろん、すべてをコピーするにはmaven依存プラグインを使用します。

1
Oleg Kaploun