项目打成jar包后,如何获得jar包的绝对路径

最近的一个程序,是非web项目,仅仅使用到了jfinal的DB+Record和Enjoy,开发完后,本地测试都通过,但是用maven插件打成jar包,在linux上跑的时候,发现PathKit.getRootClassPath()空指针。后波总修改PathKit代码如下:

public static String getRootPath() {
    String rootClassPath = "";
    try {
        String path = getClassLoader().getResource("").toURI().getPath();
        rootClassPath = new File(path).getAbsolutePath();
    }
    catch (Exception e) {
        try {
            String path = PathUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
            path = java.net.URLDecoder.decode(path, "UTF-8");
            if (path.endsWith(File.separator)) {
                path = path.substring(0, path.length() - 1);
            }
            rootClassPath = path;
        } catch (UnsupportedEncodingException e1) {
            throw new RuntimeException(e1);
        }
    }

    return rootClassPath;
}

private static ClassLoader getClassLoader() {
    ClassLoader ret = Thread.currentThread().getContextClassLoader();
    return ret != null ? ret : PathUtils.class.getClassLoader();
}

完美解决!

评论区

JFinal

2018-04-06 11:49

jfinal 3.4 的 PathKit.getRootClassPath() 已添加这个改进,感谢你的分享

热门分享

扫码入社