openfire启动报java.io.FileNotFoundException

openfire在配置完成后,启动时无法正常启动。报错信息如下:

log4j:WARN No appenders could be found for logger (org.jivesoftware.util.Log).
log4j:WARN Please initialize the log4j system properly.
Could not locate home
java.io.FileNotFoundException  at org.jivesoftware.openfire.XMPPServer.locateOpenfire(XMPPServer.java:874)  at org.jivesoftware.openfire.XMPPServer.initialize(XMPPServer.java:347)  at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:468)  at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)  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.newInstance0(Unknown Source)  at java.lang.Class.newInstance(Unknown Source)  at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)  at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)
...

这种情况是由于源码中配置的路径错误引起的,请打开文件 org.jivesoftware.openfire.XMPPServer,找到如下图代码块:

private void locateOpenfire() throws FileNotFoundException {
        String jiveConfigName = "conf" + File.separator + "openfire.xml";
        // First, try to load it openfireHome as a system property.
        if (openfireHome == null) {
            String homeProperty = System.getProperty("openfireHome");
            try {
                if (homeProperty != null) {
                    openfireHome = verifyHome(homeProperty, jiveConfigName);
                }
            }
            catch (FileNotFoundException fe) {
                // Ignore.
            }
        }

        // If we still don't have home, let's assume this is standalone
        // and just look for home in a standard sub-dir location and verify
        // by looking for the config file
        if (openfireHome == null) {
            try {
                openfireHome = verifyHome("", jiveConfigName).getCanonicalFile();
            }
            catch (FileNotFoundException fe) {
                // Ignore.
            }
            catch (IOException ie) {
                // Ignore.
            }
        }

定位到这一行,:

 openfireHome = verifyHome("..", jiveConfigName).getCanonicalFile();

verifyHome方法的第一个参数,这里配置的就是相对的路径  "..", 而我们重新编译的时候,配置到的路径不是这里,那么就要根据你配置的路径来修改项目路径的地址。

 openfireHome = verifyHome("你的openfire_src项目编译后的openfire路径", jiveConfigName).getCanonicalFile();

我的是这样:

openfireHome = verifyHome("D:\\openfire_src\\openfire_src\\target\\openfire", jiveConfigName).getCanonicalFile();

修改成功后重新编译并重启,问题解决。openfire正常启动成功。

你可能感兴趣的:(openfire启动报java.io.FileNotFoundException)