将 Openfire-Server 集成(嵌入)到另一个 Java-Project
Integrate (embed) Openfire-Server into another Java-Project
我从 Git-Repository (https://github.com/igniterealtime/Openfire) 克隆了 Openfire-Source,将其设置到 Eclipse 中并对其进行了 Ant-Build。
Openfire 是 运行 我最喜欢的自定义配置,它连接到一个 MySQL-数据库,它存储用户、密码...从 Eclipse 启动服务器工作正常。
我的目标是从另一个 Java-Project(在我的例子中是 JavaFX)启动 Openfire "invisible"。如果可能的话,我想将两个项目合并为一个。
构建 Openfire 项目已添加到我的 JavaFX 应用程序的类路径中。
1) 首先,我尝试在我现有的 JavaFX-Stage-Controller 中实例化 Openfires Startup.jar
public void initialize(URL url, ResourceBundle rb) {
initListener();
initContents();
org.jivesoftware.openfire.starter.ServerStarter.main(null);
...
}
正如预期的那样,缺少 VM 参数:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/slf4j-1.7.13/slf4j-jdk14-1.7.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/Openfire_git/build/lib/ant/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/Openfire_git/build/lib/dist/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
Jan 27, 2016 5:52:28 PM org.jivesoftware.util.Log warn
WARNUNG: Admin Lib Directory ../plugins/admin/webapp/WEB-INF/lib does not exist. Web admin console may not work.
Could not locate home
java.io.FileNotFoundException
at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:827)
at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:304)
at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:440)
at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:169)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:105)
at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56)
at org.server_fx.GUI.controller.MainScreenController.initialize(MainScreenController.java:53)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at org.server_fx.GUI.controller.GUI_Shared.loadFXMLToStage(GUI_Shared.java:63)
at org.server_fx.GUI.fxml.Manager.start(Manager.java:24)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null9(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jan 27, 2016 5:52:28 PM org.jivesoftware.openfire.XMPPServer start
SCHWERWIEGEND: null
java.io.FileNotFoundException
at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:827)
at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:304)
at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:440)
at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:169)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:105)
at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56)
at org.server_fx.GUI.controller.MainScreenController.initialize(MainScreenController.java:53)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at org.server_fx.GUI.controller.GUI_Shared.loadFXMLToStage(GUI_Shared.java:63)
at org.server_fx.GUI.fxml.Manager.start(Manager.java:24)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null9(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jan 27, 2016 5:52:28 PM org.jivesoftware.util.LocaleUtils getLocalizedString
SCHWERWIEGEND: Can't find bundle for base name openfire_i18n, locale de_DE
Critical Error! The home directory has not been configured,
which will prevent the application from working correctly.
startup.error
这会导致缺少 Openfire 主目录。
2) Openfire.bat 包含用于启动服务器的特定参数 (DopenfireHome="%OPENFIRE_HOME%")。
所以我尝试了:
public void initialize(URL url, ResourceBundle rb) {
initListener();
initContents();
try {
Process proc = Runtime.getRuntime().exec("java" -DopenfireHome=\"C:\Users\knoop\Desktop\java\Openfire_git\target\openfire\" -jar C:\Users\knoop\Desktop\java\Openfire_git\target\openfire\lib\startup.jar");
} catch (IOException e) { e.printStackTrace(); }
...
}
结果一无所获。无一例外。
是否有另一种方法可以从另一个 Java-Project 实例化 OpenFire 服务器,或者 "invisibly" 使用正确的启动参数在后台启动服务器?
好的,现在可以了。
JavaFX 初始化:
private void initContents() {
System.setProperty("openfireHome", "C:/Users/knoop/Desktop/java/workspace/Openfire/target/openfire");
System.setProperty("openfire.lib.dir", "C:/Users/knoop/Desktop/java/workspace/Openfire/target/openfire/lib");
org.jivesoftware.openfire.starter.ServerStarter.main(null);
}
我从 Git-Repository (https://github.com/igniterealtime/Openfire) 克隆了 Openfire-Source,将其设置到 Eclipse 中并对其进行了 Ant-Build。 Openfire 是 运行 我最喜欢的自定义配置,它连接到一个 MySQL-数据库,它存储用户、密码...从 Eclipse 启动服务器工作正常。
我的目标是从另一个 Java-Project(在我的例子中是 JavaFX)启动 Openfire "invisible"。如果可能的话,我想将两个项目合并为一个。
构建 Openfire 项目已添加到我的 JavaFX 应用程序的类路径中。
1) 首先,我尝试在我现有的 JavaFX-Stage-Controller 中实例化 Openfires Startup.jar
public void initialize(URL url, ResourceBundle rb) {
initListener();
initContents();
org.jivesoftware.openfire.starter.ServerStarter.main(null);
...
}
正如预期的那样,缺少 VM 参数:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/slf4j-1.7.13/slf4j-jdk14-1.7.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/Openfire_git/build/lib/ant/slf4j-simple.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/knoop/Desktop/java/Openfire_git/build/lib/dist/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
Jan 27, 2016 5:52:28 PM org.jivesoftware.util.Log warn
WARNUNG: Admin Lib Directory ../plugins/admin/webapp/WEB-INF/lib does not exist. Web admin console may not work.
Could not locate home
java.io.FileNotFoundException
at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:827)
at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:304)
at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:440)
at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:169)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:105)
at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56)
at org.server_fx.GUI.controller.MainScreenController.initialize(MainScreenController.java:53)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at org.server_fx.GUI.controller.GUI_Shared.loadFXMLToStage(GUI_Shared.java:63)
at org.server_fx.GUI.fxml.Manager.start(Manager.java:24)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null9(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jan 27, 2016 5:52:28 PM org.jivesoftware.openfire.XMPPServer start
SCHWERWIEGEND: null
java.io.FileNotFoundException
at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:827)
at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:304)
at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:440)
at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:169)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:105)
at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56)
at org.server_fx.GUI.controller.MainScreenController.initialize(MainScreenController.java:53)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at org.server_fx.GUI.controller.GUI_Shared.loadFXMLToStage(GUI_Shared.java:63)
at org.server_fx.GUI.fxml.Manager.start(Manager.java:24)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null9(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jan 27, 2016 5:52:28 PM org.jivesoftware.util.LocaleUtils getLocalizedString
SCHWERWIEGEND: Can't find bundle for base name openfire_i18n, locale de_DE
Critical Error! The home directory has not been configured,
which will prevent the application from working correctly.
startup.error
这会导致缺少 Openfire 主目录。
2) Openfire.bat 包含用于启动服务器的特定参数 (DopenfireHome="%OPENFIRE_HOME%")。
所以我尝试了:
public void initialize(URL url, ResourceBundle rb) {
initListener();
initContents();
try {
Process proc = Runtime.getRuntime().exec("java" -DopenfireHome=\"C:\Users\knoop\Desktop\java\Openfire_git\target\openfire\" -jar C:\Users\knoop\Desktop\java\Openfire_git\target\openfire\lib\startup.jar");
} catch (IOException e) { e.printStackTrace(); }
...
}
结果一无所获。无一例外。
是否有另一种方法可以从另一个 Java-Project 实例化 OpenFire 服务器,或者 "invisibly" 使用正确的启动参数在后台启动服务器?
好的,现在可以了。
JavaFX 初始化:
private void initContents() {
System.setProperty("openfireHome", "C:/Users/knoop/Desktop/java/workspace/Openfire/target/openfire");
System.setProperty("openfire.lib.dir", "C:/Users/knoop/Desktop/java/workspace/Openfire/target/openfire/lib");
org.jivesoftware.openfire.starter.ServerStarter.main(null);
}