Любой пример исходного кода для загрузки файла свойств из src / main / resources в Java 9+ в качестве модуля - PullRequest
0 голосов
/ 19 сентября 2018

Я переношу приложение Java 8 на JDK11 (ранний доступ).Новый код должен быть модулем.Он читает сообщение об ошибке из файла свойств в Java8, но возвращает значение «ноль» в Java 11. Любая помощь по загрузке / чтению resourceInputStream из /src/resources/messges/myerrors.properties

Любая помощь приветствуется.
дерево :


    ├── build.gradle
    ├── out
    │   └── production
    │       ├── classes
    │       │   ├── com
    │       │   │   └── acme
    │       │   │       └── Main.class
    │       │   └── module-info.class
    │       └── resources
    │           └── messages
    │               └── mymessages.properties
    ├── settings.gradle
    └── src
        ├── main
        │   ├── java
        │   │   ├── com
        │   │   │   └── acme
        │   │   │       └── Main.java
        │   │   └── module-info.java
        │   └── resources
        │       └── messages
        │           └── mymessages.properties
        └── test
            ├── java
            └── resources

Java :



    package com.acme;

    import java.util.Locale;
    import java.util.PropertyResourceBundle;
    import java.util.ResourceBundle;

    public class Main {
        public static void main(String args[]){
             Main m=new Main();
             m.process();
        }
    void process(){
        PropertyResourceBundle prb= (PropertyResourceBundle)ResourceBundle.getBundle("messages.mymessages",Locale.getDefault());
        String key="key1";
        String value= prb.getString(key);
        System.out.println(key+":"+value);
        }
    }
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name messages.mymessages, locale en_US
at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1679)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1572)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1546)
at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:914)
at resource.main/com.acme.Main.process(Main.java:13)
at resource.main/com.acme.Main.main(Main.java:10)

1 Ответ

0 голосов
/ 20 сентября 2018

Для кода выше решение выглядит так: "--class-path ./out/production/resources".Я понял.Кроме того, другой вариант это.У меня есть набор JUnits.Во время тестирования кода необходимо сгенерировать сообщение об ошибке из /src/main/resources/messages/mymessages.properties.Однако тест не смог «увидеть» ресурсы с «основного».После 1 дня проб разных комбинаций решение было: "--module-path ... pathTotestClassesOrOtherProductionClasses; $ buildDir / resources / main; $ buildDir / resources / test;".Поэтому вам нужно добавить «... / resources / main» в качестве пути к модулю

...