2

vaadin アプリケーション pom にスコープ依存vaadin-client-compiler関係として依存関係を追加しました。provided

私が読んだように、provided依存関係は推移的ではないため、の依存vaadin-client-compiler関係は私の webapp の依存関係になるはずです。

しかし、vaadin-client-compilerWEB-INF/lib ディレクトリ内に (commons-lang3-3.1.jar) の依存関係が見つかりました。

また、これらの依存関係もmvn dependency:tree出力に表示されます。

[INFO] |  +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] |  \- javax.validation:validation-api:jar:sources:1.0.0.GA:compile
[INFO] +- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided
[INFO] |  +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:compile
[INFO] |  |  \- com.yahoo.platform.yui:yuicompressor:jar:2.4.8:compile
[INFO] |  |     \- rhino:js:jar:1.7R2:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.2.2:compile
................................................
.................................................
[INFO] |  +- commons-codec:commons-codec:jar:1.8:compile
[INFO] |  +- commons-io:commons-io:jar:2.4:compile
[INFO] |  +- org.apache.commons:commons-lang3:jar:3.1:compile

質問:providedスコープ依存関係の依存関係が Web アプリケーションの依存関係になったのはなぜですか?

4

2 に答える 2

1

実際、公式のMaven Dependency Mediationによると、providedスコープは次のように推移的な依存関係をもたらします。

  • スコープ内の推移的な依存関係> はスコープcompileとしてフェッチされますprovided
  • providedスコープ内の推移的な依存関係> 無視
  • スコープ内の推移的な依存関係> はスコープruntimeとしてフェッチされますprovided
  • testスコープ内の推移的な依存関係> 無視

したがって、依存関係の推移的な依存関係はprovided無視されるかprovided、同様にインポートされ、最終的にパッケージ化されwarた .

サンプル プロジェクトに次の依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client-compiler</artifactId>
        <version>7.6.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

実行すると、次のようになります。

mvn dependency:tree -Dincludes=com.vaadin

出力の一部として次のようになります。

[INFO] \- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-shared:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-server:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-client:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:provided
[INFO]    \- com.vaadin:vaadin-client-compiler-deps:jar:1.2.0:provided

ドキュメントと完全に一致しています。

ただしpom.xmlファイルに次を追加すると:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-server</artifactId>
            <version>7.6.4</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注: 推移的な依存関係の 1 つのスコープを にオーバーライドしていますcompile

前のコマンドを再実行すると、次のようになります。

[INFO] \- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-shared:jar:7.6.4:compile
[INFO]    +- com.vaadin:vaadin-server:jar:7.6.4:compile
[INFO]    +- com.vaadin:vaadin-client:jar:7.6.4:provided
[INFO]    +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:compile
[INFO]    \- com.vaadin:vaadin-client-compiler-deps:jar:1.2.0:provided

つまり、推移的な依存関係vaadin-serverは引き続き によって取り込まれvaadin-client-compilerますが、そのスコープは現在、compile依存関係の管理に従ってあります。

したがって、次のことを行う必要があります。

  • セクションをpom.xml定義しているかどうかを確認しますdependencyManagement
  • 親ポンまたは階層内の任意のポンがそうするかどうかを確認してください。実行するmvn help:effective-pom -Doutput=full-pom.xmlと間違いなく役立ちます
  • アクティブなプロファイルがビルドにも影響するかどうかを確認します。実行mvn help:active-profilesすると役立つこともあります
于 2016-09-07T12:11:01.613 に答える
0

提供された依存関係の「非推移性」は注意が必要です。これは、依存関係の提供された依存関係がプルされていないことを意味するだけです。一方、提供された依存関係のコンパイル依存関係はプルされます(経験したとおり)。完全な真実は、次の表に示されています。

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

于 2016-09-07T12:06:39.240 に答える