如何在Maven项目中从C运行java类文件
我在Maven项目中有一个WebApp WAR文件,运行良好 我想从C文件调用maven项目中的类文件中的Java方法。C程序读取我的beagleboard的GPIO输入,当它打开时,它运行Java方法。我使用JNI来做这件事 我可以运行一个经典的HelloWorldJava方法,但是当我想从Maven项目中运行一个方法时,我的JVM在尝试加载Java静态方法时出现了一个致命错误 我在我的WebApp中,在/WEB-INF/myapp/classes/classfile中添加了C代码/ 类文件:应用程序 方法:试验 我的C程序:如何在Maven项目中从C运行java类文件,java,c,maven,java-native-interface,beagleboard,Java,C,Maven,Java Native Interface,Beagleboard,我在Maven项目中有一个WebApp WAR文件,运行良好 我想从C文件调用maven项目中的类文件中的Java方法。C程序读取我的beagleboard的GPIO输入,当它打开时,它运行Java方法。我使用JNI来做这件事 我可以运行一个经典的HelloWorldJava方法,但是当我想从Maven项目中运行一个方法时,我的JVM在尝试加载Java静态方法时出现了一个致命错误 我在我的WebApp中,在/WEB-INF/myapp/classes/classfile中添加了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);
}
你调查过使用吗
我注意到您有以下行:
options.optionString=-Djava.class.path=.///java源代码的路径
类路径需要指向Maven生成的jar文件,或者指向Java类文件所在的根目录
见:
在标准的Maven项目中,当您执行mvn包时,Maven将在target/下创建您的jar。因此,您可能会将-Djava.class.path=./更改为-cp/target/App.jar您是否研究过使用它
我注意到您有以下行:
options.optionString=-Djava.class.path=.///java源代码的路径
类路径需要指向Maven生成的jar文件,或者指向Java类文件所在的根目录
见:
在标准的Maven项目中,当您执行mvn包时,Maven将在target/下创建您的jar。因此,您可能会将-Djava.class.path=./更改为-cp/target/App.jar+1用于beagleboard-您应该添加该标记,顺便说一句。+1用于beagleboard-您应该添加该标记,顺便说一句。反向JNI是我使用的。但是我不能运行Maven项目中的java应用程序:/Reverse JNI是我使用的。但我无法运行Maven项目中的java应用程序:/
package App;
public class App
{
public static void test (String[] args){
System.out.println("Hello World");
}
}