2017-01-19 1 views
0

Я хочу использовать небольшую программу в качестве зависимости в моем проекте Maven. Эта программа настраивается файлом свойств, который можно редактировать до его выполнения. До сих пор я добавлял зависимость как JAR в локальный репозиторий.Извлечь файл свойств из JAR-зависимости и использовать его в своем собственном пути к классам

Теперь я хочу, чтобы свойства этой зависимости в файл доступны в моих превосходящих классах, то есть в myprogram/src/main/resources/config/myprogram.properties и не в myprogram/local-repository/com/example/mydependency/mydependency.jar/mydependency.properties.

Я попытался изменить часть кода, где определен путь к файлу свойств:

public example() { 

    Properties prop = new Properties(); 
    InputStream input = example.class.getResourceAsStream("/config/myprogram.properties"); 
    prop.load(input); 

    ... 

} 

Я также удалил оригинальный файл свойств в зависимости, прежде чем добавить его в свой локальный репозиторий.

Вся программа работает, но не так, как ожидалось. Как ни странно, ни мой новый файл свойств в /src/main/resources/config, ни старый в mydependency.jar не используется. Кажется, что какой-то файл свойств по умолчанию помещается в мой окончательный пакет JAR. Но я не могу найти его источник нигде - даже когда я пытаюсь его отладить. Этот файл свойств по умолчанию кажется, кажется, из ниоткуда.

Теперь, как я могу правильно переместить файл свойств зависимостей в свой собственный путь к классам?

И откуда должен отображаться этот файл свойств по умолчанию?

Это проблема с Maven или с самим исходным кодом?

Заранее благодарен!

+0

Это звучит очень странно: ваш локальный репозиторий maven находится в 'myprogram/local-repository'? – JimHawkins

+0

* Это проблема с Maven или с самим исходным кодом? * Моя точка зрения: это проблема вашей концепции. Создание файла свойств и помещение его в путь класса - это не усилие, которое занимает несколько часов ... создайте файл с именем, отличным от имени в зависимости, и поместите его в путь к вашему приложению (arc/main/ресурсы) – JimHawkins

+0

@JimHawkins Да, мой локальный репозиторий maven находится в '' myprogram/local-repository''. Итак, вы имеете в виду, что я должен создать новый файл свойств, который перезаписывает значение в зависимости? Как я могу достичь этого или как программа знает, что я хочу переписать этот конкретный файл, соответственно? – phly

ответ

0

Вы можете сделать что-то вроде этого:

public static String getValueFromDependencyProps(ClassLoader cl, String propertiesFile, String key) throws IOException { 
    Properties prop = new Properties(); 
    prop.load(cl.getResourceAsStream(propertiesFile)); 
    String value = prop.getProperty(key); 

    if (value == null) 
     throw new NullPointerException(); 
    else 
     return value; 
} 

А потом:

String value = getValueFromDependencyProps(YourDependencyClass.class.getClassLoader(), "your.properties", key); 

Протестировано и работает. При этом я могу получить доступ к любому файлу свойств из внешней зависимости Maven (используя один из его классов, YourDependencyClass, чтобы добраться до него).