4

Java 以外のリソースが含まれる JAR としてパッケージ化されたサードパーティ ライブラリに依存するプロジェクトを開発しています。私はそのソースにアクセスできませんが、ライブラリが特定のリソースを取得する方法は、このライブラリの JAR に関連する URI を指定することによるようです。つまり、ライブラリ jar に特定の名前がある場合にのみコードが機能します。

Maven を使用してプロジェクトをビルドしているため、これは多くの頭痛の種です。通常、サードパーティのライブラリをローカル リポジトリにインストールし、それらを依存関係として POM にインポートします。依存関係ライブラリの jar の名前が Maven によって変更されたかどうかは気にしません (通常、名前にバージョンを追加します)。

この問題を解決する正しい方法は何ですか? 予想される名前でサードパーティのライブラリを何らかの方法でインポートし、ライブラリjarがインポートされた親ディレクトリをクラスパスに追加する必要があるという直感があります(その名前を指定すると、実行時にjarを見つけることができます)。これは正しいです ?もしそうなら、どうすればこれを行うことができますか?

さらに複雑なことに、私が開発しているプロジェクトはライブラリ自体でもあるため、Maven を使用する他のプロジェクトからもインポートされることになっています。たとえば、最初にライブラリを提供済みとして宣言し、それをプロジェクトのディレクトリ内のファイル (必要な名前で) に次のようにコピーすることを考えました。

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.7</version>

            <executions>
                <execution>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>theGroup</groupId>
                                <artifactId>theArtifact</artifactId>
                                <version>theVersion</version>
                                <type>jar</type>
                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                <destFileName>EXPECTED_NAME.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

ただし、ライブラリを別のプロジェクトにインポートするときに、コピーされたファイルは推移的な依存関係とは見なされないため、これは機能しません。

アップデート:

リソースフォルダーにサードパーティのjarを(予想される名前で)配置し、このクラスパスが推移的な依存関係と見なされるように、jarの内容をクラスパスに追加することがうまくいくと思います。この解決策が機能する可能性がある場合、これを行う最も簡単な方法は何ですか?

4

1 に答える 1