Как мне выбрать расположение файлов конфигурации в проекте Maven?

StackOverflow https://stackoverflow.com//questions/9613788

Вопрос

Я создаю инструмент командной строки, который использует некоторые файлы конфигурации.

При разработке я поместил эти файлы в папку src/main/resources, и доступ к нему осуществляется getClass().getResourceAsStream("/config-file-name"), что хорошо работает.

Я выбираю плагин maven-assembly-plugin для сборки jar со всеми зависимостями.

    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Scheduler</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
               <execution>
                   <id>make-my-jar-with-dependencies</id>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
               </execution>
            </executions>
    </plugin>       

Все файлы конфигурации упакованы в jar, но я хочу разделить их.

Итак, я добавляю следующую конфигурацию:

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>conf.properties</include>
            </includes>
            <filtering>true</filtering>
            <excludes>
                <exclude></exclude>
            </excludes>
        <targetPath>..</targetPath>             
        </resource>
    </resources>

После этого файлы конфигурации оказываются рядом с jar, а не завернуты в jar.

Но мой код сейчас не может получить доступ к файлам.

Нужно ли мне изменить способ доступа к файлам в коде?

Или мне не нужно помещать эти файлы в src/main/resources/, есть альтернатива?

Если кто-то знает, пожалуйста, помогите.

Спасибо.


Обновлять:Наконец, я отказываюсь от использования файла ресурсов maven, вместо этого я устанавливаю путь к файлу по тому же пути, что и jar по умолчанию, все работает хорошо, за исключением того, что Eclipse жалуется.

Поскольку я хочу переместить файл конфигурации из jar и не хочу, чтобы он находился в папке target/classes, поэтому я использую <targetPath>..</targetPath> чтобы переместить файл конфигурации в тот же каталог, что и файл jar.

Когда я повторно создаю настройки проекта Eclipse, Eclipse говорит:Невозможно вложить выходную папку «project/target/test-classes» в выходную папку «project/target».

Кто-нибудь мне поможет?

Это было полезно?

Решение 3

В конце концов я отказался от использования файла ресурсов maven, вместо этого установил путь к файлу по тому же пути, что и jar по умолчанию, все работает хорошо, за исключением того, что Eclipse жалуется.

(Поскольку я хочу переместить файл конфигурации из jar и не хочу, чтобы он находился в папке target/classes, поэтому я использую ..чтобы переместить файл конфигурации в тот же каталог, что и файл jar.Когда я повторно создаю настройки проекта Eclipse, Eclipse говорит:Невозможно вложить выходную папку «project/target/test-classes» в выходную папку «project/target».)

До сих пор я не нашел решения, похоже, это ошибка затмения.

Теперь я отказался от Eclipse и перешел на IntelliJ IDEA, это довольно хорошая IDE, особенно прекрасно интегрированная с Maven.Я избегаю любого шанса использовать eclipse для любого проекта Maven.

Другие советы

Ваше приложение не может получить доступ к файлам конфигурации, поскольку они больше не находятся в его пути к классам.

Если вы хотите отделить файлы конфигурации от остальной части приложения, возможно, вам стоит пересмотреть свои файлы конфигурации. формат сборки.Возможно, вы захотите использовать bin вместо jar-with-dependents, хотя это сопряжено с проблемами при распространении и использовании.

В зависимости от того, насколько сложен файл свойств, вы можете использовать возможность фильтра плагина ресурсов, чтобы изменить значение на основе профилей maven.Например, если вы хотите иметь свойство с именем location, вы можете определить профиль разработки и производства, а затем установить значение свойства maven в pom (или Profiles.xml, если вы используете maven 2):

<properties>
  <my.location>the_real_value</my.location>
</properties>

Затем в файле свойств вы должны сделать это:

location=${my.location}

Просто убедитесь, что вы включили фильтрацию в своем pom, например:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top