我在Maven項目中運行良好的WebApp(WAR文件)。如何在Maven項目中從C運行java類文件
我想從C文件中調用maven項目中的類文件中的Java方法。 C程序讀取beagleboard的GPIO輸入,當它打開時,它運行Java方法。我使用JNI來做到這一點。
我可以運行一個經典的HelloWorld Java方法,但是當我想從我的Maven項目運行一個方法時,當它嘗試加載Java靜態方法時,我的JVM出現致命錯誤。
我添加的C代碼在我的Web應用程序,在/ WEB-INF/MyApp的/類/類文件/
類文件:應用程序 方法:測試
我的C程序:
JNIEnv* create_vm(JavaVM ** jvm) {
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options;
//Path to the java source code
options.optionString = "-Djava.class.path=./";
//JDK version. This indicates version 1.6
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;
int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);
if(ret < 0)
printf("\nUnable to Launch JVM\n");
return env;
}
int main(int argc, char** argv)
{
int fd, ret, data[64];
JNIEnv *env;
JavaVM * jvm;
env = create_vm(&jvm);
if (env == NULL)
return 1;
fd = ret = open(argv[argc - 1], O_RDONLY);
printf("open returned %d\n", ret);
while (1) {
ret = read(fd, &data, sizeof(data));
printf("read returned %d\n", ret);
jclass helloWorldClass = (*env)->FindClass(env, "App");
printf("appel class\n");
jmethodID mainMethod = (*env)->GetStaticMethodID(
env, helloWorldClass, "test", "([Ljava/lang/String;)V");
printf("appel method\n");
(*env)->CallStaticVoidMethod(env, helloWorldClass, mainMethod, NULL);
sleep(2);
}
(*jvm)->DestroyJavaVM(jvm);
exit(0);
}
Java類:
package App;
public class App
{
public static void test (String[] args){
System.out.println("Hello World");
}
}
+1的beagleboard - 你應該添加標籤,順便說一句。 – noahlz