【发布时间】:2016-10-10 18:42:49
【问题描述】:
我正在为 OpenFire 服务器开发插件。我正在尝试将 Spring 集成到这个插件中。插件初始化后,我想为我的 Spring 调用 Main 方法。
当我单独执行 Spring 时,它工作正常,但是当我从插件调用它的 main 方法时,我得到一个异常。 我想如何调用 Spring Main 方法。 我错过了什么。任何帮助将不胜感激。谢谢。
Spring 主类:
@SpringBootApplication
公共类应用程序{
公共静态无效主要(字符串[]参数){
尝试 {
SpringApplication.run(Application.class, args);
System.out.println("没有错误");
} 捕捉(异常 e){
System.out.println("错误" + e);
}
}
}
OpenFire 插件:
公共类 FetchNewsPlugin 实现插件 {
@覆盖
public void initializePlugin(PluginManager manager, File pluginDirectory) {
可运行 r = new Runnable() {
公共无效运行(){
字符串 [] 参数 = {};
应用程序.main(args);
}
};
新线程(r).start();
System.out.println("插件初始化");
}
@覆盖
公共无效destroyPlugin(){
}
}
日志输出:
线程“Thread-13”中的异常 java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication 在 hello.Application.main(Application.java:11) 在 org.clinton.openfire.plugin.FetchNewsPlugin$1.run(FetchNewsPlugin.java:20) 在 java.lang.Thread.run(Thread.java:745) 引起:java.lang.ClassNotFoundException:org.springframework.boot.SpringApplication 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3 更多
抛出异常的地方:
/**
* 从 URL 搜索中查找并加载具有指定名称的类
* 小路。任何引用 JAR 文件的 URL 都会根据需要加载和打开
* 直到找到类。
*
* @param name 类名
* @return 生成的类
* @exception ClassNotFoundException 如果找不到类,
* 或者如果装载机已关闭。
* @exception NullPointerException 如果 {@code name} 是 {@code null}。
*/
受保护的类 findClass(最终字符串名称)
抛出 ClassNotFoundException
{
最终班级成绩;
尝试 {
结果 = AccessController.doPrivileged(
新的 PrivilegedExceptionAction>() {
公共类 run() 抛出 ClassNotFoundException {
String path = name.replace('.', '/').concat(".class");
资源 res = ucp.getResource(path, false);
如果 (res != null) {
尝试 {
返回定义类(名称,资源);
} 捕捉(IOException e){
throw new ClassNotFoundException(name, e);
}
} 别的 {
返回空值;
}
}
}, ACC);
} 捕捉(java.security.PrivilegedActionException pae){
throw (ClassNotFoundException) pae.getException();
}
如果(结果==空){
抛出新的 ClassNotFoundException(name);
}
返回结果;
}
SLF4J:类路径包含多个 SLF4J 绑定。 SLF4J:在 [jar:file:/home/clinton/git/Openfire/bin/build/lib/ant/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:在 [jar:file:/home/clinton/git/Openfire/bin/build/lib/dist/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:在 [jar:file:/home/clinton/git/Openfire/build/lib/ant/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:在 [jar:file:/home/clinton/git/Openfire/build/lib/dist/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:有关说明,请参见 http://www.slf4j.org/codes.html#multiple_bindings。 SLF4J:实际绑定的类型为 [org.slf4j.impl.SimpleLoggerFactory]
【问题讨论】: