jarファイルからJNAライブラリを利用したC++コードの呼び出しを試験しています
対象のコードは以下です
D\P\Test.java
1package P; 2import com.sun.jna.Library; 3import com.sun.jna.Native; 4 5public class Test{ 6 public static void main(String[] args){ 7 I.i.Window(300, 300, 300, 300); 8 } 9} 10 11interface I extends Library{ 12 static I i=(I)Native.loadLibrary("..\\..\\Jar\\JNA\\CLR.dll",I.class); 13 void Window(int x,int y,int a,int b); 14}
このコードをコンパイルすると、C++側の関数が実行されます
これをjarファイルから起動したいと考え、マニフェストファイルを以下の内容で定義しました
D\D.mf
1Main-Class: P.Test 2Class-Path: ..\..\Jar\JNA\jna-5.1.0.3.jar 3
そして以下のコマンドでjarファイルを生成します
jar
1jar -cvfm Test.jar D.mf *
このjarファイルをjavaコマンドで起動すると、以下のようなエラーが表示されます
Error
1Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Library 2 at java.base/java.lang.ClassLoader.defineClass1(Native Method) 3 at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013) 4 at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) 5 at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) 6 at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) 7 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) 8 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) 9 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 10 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 11 at P.Test.main(Test.java:7) 12Caused by: java.lang.ClassNotFoundException: com.sun.jna.Library 13 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) 14 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 15 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 16 ... 10 more
一行目の英文から、おそらくjna-5.1.0.3.jarにメインクラス属性が含まれていない為と思われますが、これを回避してコマンドより生成したjarファイルからコードを実行する方法は何か考えられるでしょうか?
そもそもそのようなことは不可能でしょうか?
尚、Eclipsを用いてエクスポートした実行可能jarファイルからは対象コードが正常に動作しているので、コード及びファイルパスの指定に不備はないと考えています
その為Eclips経由でも問題はないのですが、コマンド操作による実行パターンも把握したいため、よろしければご助力頂けると幸いです
回答1件
あなたの回答
tips
プレビュー