0

私が書いた API の実装を提供する Web アプリがあります。したがって、my-webapp (war)、my-api (jar)、および my-impl (jar) の 3 つのアーティファクトのセットがあります。pom は簡単です。 my-impl は my-api を依存関係としてリストし、 my-webapp は my-impl を依存関係としてリストします。mvn install を実行すると、WEB-INF/lib へのパッケージ化中に my-impl が my-api を取り込むことが期待されます。しかし、それは my-impl だけを引き込んでいます。

ここで何が間違っていますか?それとも、このように機能することは期待されていませんか?

更新:これが役立つ場合、次の警告が表示され続けます:

[警告] mine:my-impl:jar:1.1.0.0 の POM が無効です。推移的な依存関係 (存在する場合) は利用できません。詳細については、デバッグ ログを有効にしてください。

POM は次のとおりです。

パッケージャー:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>${product.version}</version>
    <packaging>pom</packaging>
    <name>Webapp Packager</name>
    <description>Webapp Packager</description>
    <modules>
        <module>my-webapp</module>
        <module>my-api</module>
        <module>my-impl</module>
    </modules>
</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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-webapp</artifactId>
    <packaging>war</packaging>
    <name>Webapp</name>
    <description>Webapp</description>
    <dependencies>
        <dependency>
            <groupId>mine</groupId>
            <artifactId>my-impl</artifactId>
            <version>${product.version}</version>
        </dependency>
    </dependencies>
</project>

API:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-api</artifactId>
    <packaging>jar</packaging>
    <name>API</name>
    <description>API</description>
</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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-impl</artifactId>
    <packaging>jar</packaging>
    <name>Impl</name>
    <description>Impl</description>
    <dependencies>
        <dependency>
            <groupId>mine</groupId>
            <artifactId>my-api</artifactId>
            <version>${product.version}</version>
        </dependency>
    </dependencies>
</project>
4

1 に答える 1

1

現在のように、「パッケージャー」POM はアグリゲーター (モジュールがあるため) と親 (すべてのモジュールがそれらの<parent>要素でそれを参照するため) の両方です。したがって、「パッケージャー」POMには明示的なバージョンが必要です。${project.version} プレースホルダーは使用できません

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Webapp Packager</name>
    <description>Webapp Packager</description>
    <modules>
        <module>my-webapp</module>
        <module>my-api</module>
        <module>my-impl</module>
    </modules>
</project>

子モジュールでは、<parent>要素は次のようになります。

<parent>
    <groupId>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>0.1-SNAPSHOT</version>
</parent>

次に、 aが機能するmvn clean installはずです。

于 2013-06-17T16:02:31.213 に答える