2

Jena TDB 0.9.3 (Jena ARQ 2.9.3 に依存)、Jersey 1.8、RMOnto 1.0をロードする Maven リポジトリがあります。要点は、ご想像のとおり、セマンティック データセットの分析を行うことです。

「ハードワイヤード」のように、RMOntoにはARQ 2.8.7が組み込まれているようです。pom ファイルには明示的な依存関係はありませんが、jar ファイルにはARQ.class. Maven Enforcer Plugin などでは気付かないので非常にトリッキーです。

これにより、Jersey は pom.xml で定義されたものではなく、RMOnto の ARQ バージョンを使用するようです。これは最小限の例です。テストを実行すると (ARQ.VERSION が 2.9.3 に等しいかどうかを確認します)、成功します。プロジェクトをビルドして Tomcat 7 にデプロイすると、出力として 2.8.7 が表示されます。

  • この動作は予期されたもので、その理由は何ですか?
  • Jersey に ARQ 2.9.3 を強制的に使用させるにはどうすればよいでしょうか?
  • それが不可能な場合、残りのソースが 2.9.3 を使用している間に RMOnto を分離して 2.8.7 を使用することはできますか?

前もって感謝します!

4

3 に答える 3

3

依存関係リストの最初に ARQ 2.9.3 を定義する必要があります。そうすることで、ビルドにその特定のバージョンを強制的に使用させることができます。依存関係の順序は、使用するアーティファクトを選択する際に重要です。


アップデート

OK、私は問題が何であるかを理解しています。

したがって、回避策としてできることは、ARQ 2.9.3 バージョンがWEB-INF/classesフォルダーに追加されていることを確認することです。これは、次を使用して実行できますmaven-dependency-plugin

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.apache.jena</groupId>
                                <artifactId>jena-arq</artifactId>
                                <version>2.9.3</version>
                                <outputDirectory>${project.build.directory}/classes</outputDirectory>
                                <excludes>**/META-INF/</excludes>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

戦争と爆発した戦争には、ARQ 2.9.3 のすべてのクラスがWEB-INF/classesフォルダーに含まれます。それらは、フォルダー内にあるすべての jar ファイルの前にロードされWEB-INF/libます。

注: Tomcat でこれをテストしていませんが、動作しないことはわかりません。

NB2:これはハックです。ARQ パッケージを RMOnto jar から削除することをお勧めします。

于 2012-11-05T18:11:00.243 に答える
1

RMONto に対して欠陥レポートを提出する必要があります。ライブラリコードを POM で管理できる依存関係として含めるのではなく、jar にハードワイヤリングすることは、コードメンテナーが修正する必要がある間違いなく悪い考えです。

于 2012-11-05T23:36:54.697 に答える
1

ファイルが RMOnto .jar に直接コピーされている場合、動作は予期されたものです。

その場合、最善の策はそれをハードコーディングすることです。つまり、ARQ ファイルをパッケージから直接削除することです。RMOnto-1.0.jar パッケージを開くと、arq フォルダーに arq ファイルが表示されます。必要なことは、jar ファイル (単なる .zip) を開き、そこから ARQ ファイルを削除し、編集した RMOnto パッケージをバージョン管理/リポジトリに保存し、そこから編集したパッケージを参照することです。また、古いバージョンの ARC の pom に excludes ステートメントを追加し、新しいバージョンへの依存関係を維持する必要があります。

必要に応じて、RMOnto の pom ファイルに記載されていない他の依存関係を削除してから、それらを RMOnto pom ファイルに追加する (ソース コードがある場合は再構築する) こともお勧めします。このようにして、Maven メカニズムはそれらを認識します。このファイルには、このような多くの依存関係が含まれているようで、将来的に頭痛の種になります。

于 2012-11-06T06:48:58.323 に答える