如何在 Grails 中将真实路径作为字符串
How do I get real path as string in Grails
使用 grails-3.3.1 开发项目并生成一个 Runnable WAR 文件。当我 运行 使用命令时:
java -jar build/libs/myproject-0.1.war
它正在为以下行返回 null
:
serveltContext.getRealPath("/someSource");
但在 Tomcat 容器中部署时它工作正常。
然后尝试了以下方法:
servletContext.getResource("someSource").getPath();
它正在返回,但不是预期的那个,也不是 getRealPath()
returns。
它像这样返回:
D:/myprojects/myproject/build/libs/myproject-01.war*/
这对我没用。找到建议使用 getResourceAsStream()
的答案,但我不想要资源,我只想要 String
。
我找不到既能在本地工作又能在容器中部署时工作的解决方案。我最终使用此解决方法来获取路径,具体取决于代码在哪个环境中 运行 in:
def path
if (Environment.current == Environment.DEVELOPMENT) {
path = java.nio.file.FileSystems.default.getPath("someSource").toAbsolutePath().toString()
} else {
path = ServletContextHolder.servletContext.getRealPath("/someSource")
}
我在使用 Grails 4.0.11 时遇到了同样的问题。似乎 serveltContext.getRealPath 已弃用并且 returns 为空。您的解决方案对我也不起作用,所以我决定采用以下方法:
(发现于 https://howtodoinjava.com/spring-boot2/read-file-from-resources/)
import org.springframework.core.io.ClassPathResource
import org.springframework.core.io.Resource
Resource resource = new ClassPathResource("pdfResources/fonts/SFUIText-Medium.ttf")
String path = resource?.getPath()
鉴于我的应用名为“filetest”,该文件位于 filetest/src/main/resources/pdfResources/fonts/SFUIText-Medium.ttf
这适用于“grails run-app”和“grails war”作为嵌入式可运行war 文件。希望对你有帮助,因为我花了很长时间。
使用 grails-3.3.1 开发项目并生成一个 Runnable WAR 文件。当我 运行 使用命令时:
java -jar build/libs/myproject-0.1.war
它正在为以下行返回 null
:
serveltContext.getRealPath("/someSource");
但在 Tomcat 容器中部署时它工作正常。
然后尝试了以下方法:
servletContext.getResource("someSource").getPath();
它正在返回,但不是预期的那个,也不是 getRealPath()
returns。
它像这样返回:
D:/myprojects/myproject/build/libs/myproject-01.war*/
这对我没用。找到建议使用 getResourceAsStream()
的答案,但我不想要资源,我只想要 String
。
我找不到既能在本地工作又能在容器中部署时工作的解决方案。我最终使用此解决方法来获取路径,具体取决于代码在哪个环境中 运行 in:
def path
if (Environment.current == Environment.DEVELOPMENT) {
path = java.nio.file.FileSystems.default.getPath("someSource").toAbsolutePath().toString()
} else {
path = ServletContextHolder.servletContext.getRealPath("/someSource")
}
我在使用 Grails 4.0.11 时遇到了同样的问题。似乎 serveltContext.getRealPath 已弃用并且 returns 为空。您的解决方案对我也不起作用,所以我决定采用以下方法: (发现于 https://howtodoinjava.com/spring-boot2/read-file-from-resources/)
import org.springframework.core.io.ClassPathResource
import org.springframework.core.io.Resource
Resource resource = new ClassPathResource("pdfResources/fonts/SFUIText-Medium.ttf")
String path = resource?.getPath()
鉴于我的应用名为“filetest”,该文件位于 filetest/src/main/resources/pdfResources/fonts/SFUIText-Medium.ttf
这适用于“grails run-app”和“grails war”作为嵌入式可运行war 文件。希望对你有帮助,因为我花了很长时间。