3

MySQLコネクタJARを使用してJDBC接続を確立しています。私の理解では、このJARはクラスパスにありmysql:、接続文字列で指定すると動的にロードされます。

を使用して、POMでこの依存関係を宣言し<scope>runtime</scope>ます。を実行するmvn dependency:analyzeと、このアーティファクトが「未使用」として報告されます。単純な静的分析ではそれが必要かどうかを判断することはできないと思いますが、それはほぼすべてのruntimeスコープのアーティファクトに当てはまりますよね?このアーティファクトが本当に存在する必要があることをMavenにどのように納得させることができますか?

4

1 に答える 1

4

dependency:treeそれがあなたが探しているものであるならば、あなたのpomファイルによって参照されるすべてのアーティファクトをリストします。そうでなければ、運が悪い可能性があります。Mavenは、依存関係アナライザーがバイトコードレベルで機能し、一部のシナリオでは依存関係が未使用であると誤って報告することを公然と宣言します。

ランタイムスコープの依存関係が使用される場合と使用されない場合があり、バイトコード分析で判断することは不可能です(実際、私が考えることができるほとんどの分析で判断することは不可能です)。Mavenは、それらが使用されていると想定するか、未使用であると想定するかを決定する必要があり、ユーザーがそれを理解できると考えて、後者を使用しました。

ランタイムスコープの依存関係を使用済みとして処理するようにMavenに指示するオプションはありませんがusedDependencies、構成内のアレイに特定のアーティファクトを手動で追加できます。Mavenは、これらの依存関係が使用されていると単純に想定します。独自の依存関係アナライザーを作成するか、このシナリオを処理できるサードパーティの依存関係アナライザーを見つけることもできます。

==コメントの更新==

そうです、それはまったく新しいものです。この問題は、2012年11月25日にリリースされたバージョン2.6で修正されました。まだ、多くのパブリックミラーリポジトリにはありません。ここで見つけることができます。

非常に新しいため、その使用例はありませんが、Mavenはいくつかの規則に従います。私はそれが次のように宣言されることを期待します:

<build>
    <plugins>
     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <usedDependencies>
            <usedDependency>org.foo.bar:baz-tron</usedDependency>
            <usedDependency>org.foo:whatsit</usedDependency>
          </usedDependencies>
        </configuration>
      </plugin>
    </plugins>
  </build>
于 2012-11-28T13:08:01.767 に答える