2017-09-20 25 views
0

私は、2番目のjarファイル内のクラスを使用するjarファイルを持っています。しかし、最初のjarファイルを実行すると、クラスが見つからないという例外が発生します。問題のトラブルシューティング方法に関するドキュメントが見つかりません。Java JARはClass-Pathでクラスをロードできませんか?

私は2つの.jarファイルMyApp.jarとsqljdbc42.jarを持っています。これらの両方の.jarファイルは同じディレクトリにあります。

MyApp.jarは主に以下のコードを有する。MyApp.jarため

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

マニフェストは、以下を有する:

Manifest-Version: 1.0 
Main-Class: com.mycompany.myapp.MyApp 
Class-Path: sqljdbc42.jar 
<blank line> 
com.microsoft.sqlserver.jdbc.SQLServerDriver

クラスは、JAR sqljdbc42.jarです。 MyApp.jarが実行されると

は、次の例外が発生します。Java 8を用いて

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 

、IntelliJのに内蔵、7zipをでジャーを開くことによって、マニフェストの内容を検証しました。 これをどのように(一見単純で基本的なJava JARコンセプトの)作業を得ることができるかアドバイスをいただければ幸いです。

1)あなたは "Eclipse Neonを" IDEを使用してjarファイルを生成できます。

+1

'java -classpath" MyApp.jar; sqljdbc42.jar "com.mycompany.myapp.MyApp'を実行すると動作しますか?私はこれがあなたが望むものではないことを知っていますが、原因の特定に役立つかもしれません。 –

+1

@KeesKistうわー、うまくいきます!私が以前に試していたのは、動作しなかった 'java -classpath" slqjdbc42.jar "-jar MyApp.jar'でした。私は2つの違いがわからないのですか?今はバットファイルでテストするプロジェクトを送っていますが、これに基づいて問題を解決する方法を知りたいですか?私は同じsqljdbc42.jarファイルを使用するように構築する必要がある他のものがあります。 – Wige

答えて

0

はあなたの問題を解決するには、3つの方法があります。

  • プロジェクト「のlib」フォルダを作成し、そこにsqljdbc42.jarを置きます。

  • sqljdbc42.jarをクラスパスに追加します。プロパティ - > Javaビルドパス - >ライブラリ - > JARを追加...(libからjarを選択します);


  • 右プロジェクト]をクリックします - > [エクスポート... - > RunnableをJARファイル - >起動設定(あなたのメインクラスを選択)し、図書館渡すチェック:生成されたJARにエキス必要なライブラリを。

Eclipseは任意のセキュリティ問題とClassNotFound例外なしに自動的にすべての参照ライブラリを再梱包します。

2)プロジェクトをMavenプロジェクトに変換する必要があります。そして、JARを生成し、カスタムlibsの依存関係を作成するために特別なプラグインを使用します。

3)Intellij Ideaを使用して生成することもできます。しかし、署名されたすべてのライブラリが生成されたjarの外側にある構成のアプリケーションのArtifactを作成する必要があります。

私は最初の変種が最も簡単だと思います。それを確認してください。それが助けにならないなら、私はより詳細な他の方法を説明します。

関連する問題