如果我使用 Apache2(而不是 Tomcat),Java 找不到我的翻译文件

Java can't find my translation file if I use Apache2 (instead of Tomcat)

我有一个带有 TranslationService class 的 Java Spring 应用程序 (maven),returns 从 JSON 文件(backend.json) .. 当我构建我的项目 (mvn clean package) 时,我得到了我的 {project}-{version}.jar 文件。如果我执行这个文件(java -jar target/*.jar),一切正常, 我可以看到我的页面,一切正常。

但是我现在有一个问题。在我的项目的生产版本中,我将 Apache2 与 VirtualHost 一起使用。我的测试配置如下:

<VirtualHost *:80>
        ServerName myloc
        ProxyPass / http://localhost:8080/
</VirtualHost>

我仍然可以看到我的页面并填写我的表格等。但是如果我在最终提交后,我的申请会给我发送一封电子邮件并为我创建一个 pdf。但是我的申请 崩溃,因为它不能翻译我的东西,因为它说,它找不到我的文件。但在我的默认 (tomcat) 版本中它运行良好。

static String getTranslation(String lang, String jsonKey) {
    try {
        File file = new File("./src/main/resources/static/i18n/"+lang+"/backend.json");
        JsonReader reader = Json.createReader(FileUtils.openInputStream(file));
        // ...

错误:

"message":"java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.io.FileNotFoundException: File './src/main/webapp/i18n/de/backend.json' does not exist"

由于您的路径是相对于工作目录的,因此您应该首先检查文件是否放置在正确的位置。

要记录工作目录,您可以这样获取:

   System.out.println("Current dir:"+new java.io.File( "." ).getCanonicalPath());

或者您可以使用文件的绝对路径(我不推荐)。

现在您检查程序工作目录的相对路径!

但是您的文件位于资源文件夹中并打包到 jar 中,因此您不会找到“./src....”

您应该以不同的方式访问资源。 (示例:click me