eclipseについて質問があります。  
外部フォルダにあるpropertiesファイルを  
読み込みたいのですが、  
eclipseのVM引数から  
Javaのビルドパス>ライブラリー>クラスパスの  
外部フォルダーを設定する方法はありますか。

よろしくお願いいたします。

補足  
Thymeleafを使ってhtmlに直接messages.propertiesの値をを読み込んでいるため、  
外部ディレクトリをクラスパスに追加したいです。
CC BY-SA 4.0
2020-04-22T08:56:13.360
65859
2022-08-08T09:04:55.433
2020-04-25T08:21:41.490
2808
18565
question
java eclipse spring-boot tomcat
eclipseのVM引数からクラスパスを設定する方法
Eclipse(STS)から実行する際は "Javaのビルドパス>ライブラリー>クラスパスの外部フォルダー" によって外部の
`messages.properties` を読めるようにしているが、 `java -jar <spring-bootアプリ>`
コマンドで実行する場合にどう指定すれば良いか、という意図の質問ということでよいでしょうか。

* * *

メッセージソース(リソースバンドル)のロケーション指定は
[`spring.massages.basename`](https://docs.spring.io/spring-
boot/docs/2.2.6.RELEASE/reference/htmlsingle/#boot-features-
internationalization)で行いますが、ここでは`file:`でファイルシステム上のファイル(のベースネーム)を指定することもできます(参考:
[How to externalize i18n properties files in spring-boot applications - Stack
Overflow](https://stackoverflow.com/a/39487085/4506703))。

またプロパティ設定はコマンドライン引数で指定できます([4.2.2. Accessing Command Line
Properties](https://docs.spring.io/spring-
boot/docs/2.2.6.RELEASE/reference/htmlsingle/#boot-features-external-config-
command-line-args))。

したがって、例えば `./external-resources/messages.properties` が読ませたいファイルだとすると、

```

    java -jar <spring-bootアプリ>.jar --spring.messages.basename=file:external-resources/messages
    
```

で実現可能です。

[実行サンプルコード](https://github.com/yukihane/stackoverflow-
qa/tree/master/so65859/jar-version),
[Thymeleafを使ったwarバージョン](https://github.com/yukihane/stackoverflow-
qa/tree/master/so65859/war-version)

* * *

Tomcatにデプロイする場合、Tomcat側に指示する必要があります。設定方法はこちらに詳しいです:

  * [Can I create a custom classpath on a per application basis in Tomcat - Stack Overflow](https://stackoverflow.com/a/26126563/4506703)
  * [Apache Tomcat 9 Configuration Reference (9.0.34) - The Resources Component](http://tomcat.apache.org/tomcat-9.0-doc/config/resources.html)

[前出したwar](https://github.com/yukihane/stackoverflow-
qa/tree/master/so65859/war-version)をTomcat9にデプロイし `/tmp/external-resources`
ディレクトリ配下のメッセージリソースを読む場合を例にすると、

  * `messages.properties` ファイルを `/tmp/external-resources/` ディレクトリ下に移動する
  * Tomcatの本体配下に `conf/Catalina/localhost/demo-0.0.1-SNAPSHOT.xml` ファイルを作成する。内容は次の通り:

```

    <Context>
      <Resources>
        <PostResources
          className="org.apache.catalina.webresources.DirResourceSet"
          base="/tmp/external-resources"
          webAppMount="/WEB-INF/classes" />
      </Resources>
    </Context>
    
```

この設定で `/tmp/external-resources` ディレクトリがwarファイル内 `/WEB-INF/classes`
に差し込まれますのでアプリケーションはメッセージリソースをクラスパス内で見つけることができるようになります。
CC BY-SA 4.0
2020-04-24T04:20:49.817
65913
2020-04-25T08:21:12.543
2020-04-25T08:21:12.543
2808
2808
65859
answer