2

私は 2 つのプロジェクトを持つ Eclipse のプロジェクトで作業しています。ビューと呼ばれる製品とプラグイン。

ビューの pom.xml ファイルに依存関係として SVNKit v1.3.5 を追加しました。

<dependency>
    <groupId>org.tmatesoft.svnkit</groupId>
    <artifactId>svnkit</artifactId>
    <version>1.3.5</version>
    <scope>compile</scope>
</dependency>

ビュー プラグインで Maven 2 Tools > Generate Eclipse Artifacts (from cache) を実行すると、repo1.maven.org/maven2/...etc から SVNKit がダウンロードされるため、ビルドは成功します。

ビュー プラグインで Maven 2 Tools > Generate OSGi Bundle Manifest and Copy Resources を実行すると、ビルドが成功します。

次に、製品で Maven 2 Tools > Generate and Set Target Platform を実行し、他のプロジェクトでいつも行うように実行構成を設定します。

製品は Eclipse アプリケーションとして設定され、プラグインはエラーなしで検証されます。

私はコードを書くことができ、それはクラスを検出し、コンパイル時に問題はありません。問題は、実行時にプログラムがクラスを必要とする場合です。

製品を実行すると、SVNKit からのクラス ファイルを必要とする UI ポップアップ ウィンドウが表示されるまで、問題なく動作します。ウィンドウがポップアップせず、コンソールに次のように表示されます。

!ENTRY org.eclipse.ui 4 0 2012-07-19 10:07:10.242
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NoClassDefFoundError: org/tmatesoft/svn/core/SVNException
...
Caused by: java.lang.ClassNotFoundException: org.tmatesoft.svn.core.SVNException

この問題を解決しようとしましたが、どのような「修正」を試みても同じエラーが何度も発生しました。クラスパスは、他の依存関係と同様に m2 リポジトリを指しているため、正しいです。

<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5.jar" sourcepath="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-sources.jar">
    <attributes>
        <attribute value="jar:file:/<details omitted>/.m2/repository/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-javadoc.jar!/" name="javadoc_location"/>
    </attributes>
</classpathentry>
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/trilead-ssh2/build213-svnkit-1.3-patch/trilead-ssh2-build213-svnkit-1.3-patch.jar"/>
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4.jar" sourcepath="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4-sources.jar"/>

任意の提案をいただければ幸いです。前もって感謝します!

編集: SVNKit v1.3.5 のマニフェスト ファイルは、参照したライブラリにある他のものと比較して非常に短いです:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_15-b04 (Sun Microsystems Inc.)

他のライブラリには、エクスポートパッケージ、バンドルバージョン、バンドル名、インポートパッケージなどの詳細情報があります...それが問題でしょうか? もしそうなら、SVNKit 1.3.5 のマニフェスト バンドル ファイルを Google で調べてみましたが、何も見つかりませんでした。

4

1 に答える 1

0

<scope>provided</scope>スコープをではなく に変更してみてくださいcompile

デフォルトのスコープはcompileで、実行時に依存関係が存在しないことを意味します。これには、提供されたスコープを使用します。Apache のIntroduction to Maven Dependenciesの Maven 依存関係のスコープの詳細。

これで問題が解決することを願っています。

于 2012-07-19T15:22:14.150 に答える