获取undertow.resourcePath的真实路径

在配置文件中undertow.resourcePath的配置如下

undertow.resourcePath = classpath:bill-biaobei-tts-server

在部署时会部署到不同的目录下,如果在程序中获取真实的undertow.resourcePath路径

编写controller

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import com.jfinal.core.Controller;
import com.jfinal.kit.PathKit;

public class PathController extends Controller {
  public void index() {
    URL resource = this.getClass().getClassLoader().getResource("");
    Map<String, String> map = new HashMap<>();
    map.put("rootClassPath", PathKit.getRootClassPath());
    map.put("webRootPath", PathKit.getWebRootPath());
    map.put("classLoader", resource.getFile());
    renderJson(map);
  }
}

windows返回

{
  "rootClassPath": "D:\\dev_workspace\\java\\hg_project\\bill-biaobei-tts-server\\target\\classes",
  "webRootPath": "D:\\dev_workspace\\java\\hg_project\\bill-biaobei-tts-server",
  "classLoader": "/D:/dev_workspace/java/hg_project/bill-biaobei-tts-server/target/classes/"
}

linux使用systemctl启动返回

{
  "rootClassPath":"/opt/jfinal/bill-biaobei-tts-server-1.0/config",
  "webRootPath":"/opt/jfinal/bill-biaobei-tts-server-1.0/webapp",
  "classLoader":"/opt/jfinal/bill-biaobei-tts-server-1.0/config
}

如果进行拼接,都获取不到undertow.resourcePath的真实路径

打包后真实的undertow.resourcePath的真实路径是/opt/jfinal/bill-biaobei-tts-server-1.0/bill-biaobei-tts-server


评论区

李通

2019-12-05 14:09

上面的排版非常乱,怎么修改呢

李通

2019-12-05 16:10

问题已经解决了
在开发环境下获取
URL resource = this.getClass().getClassLoader().getResource("bill-biaobei-tts-server/index.html");
在linux环境下获取
打包时打包到static目录下
```


${basedir}/src/main/resources/${artifactId}
static/${artifactId}

```
启动是传入./static
```
/usr/java/jdk1.8.0_211/bin/java -Xverify:none -cp ./config:./lib/*:./static com.uairobot.bill.biaobei.Application
```
在代码中获取和上面相同,然后在获取parent

李通

2019-12-05 16:11

标签显示不出来吗?

${basedir}/src/main/resources/${artifactId}
static/${artifactId}

李通

2019-12-05 16:12

\
${basedir}/src/main/resources/${artifactId}
static/${artifactId}

JFinal

2019-12-07 00:05

undertow.resourcePath 配置的路径,如果是目录则会被检测路径是不是真的存在,存在则会生效,否则无效

如果配置是 "classpath:" 前缀,则不会检测路径是否真的存在

另一个知识点:PathKit.getWebRootPath() 得到的路径是 undertow.resourcePath 配置的值中第一个存在的目录

最后,原贴可以一直修改,如果需要追加回复代码的话,可以在个人空间修改原贴

热门反馈

扫码入社