Как я должен выбрать расположение файлов конфигурации в проекте Maven - PullRequest
0 голосов
/ 08 марта 2012

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

При разработке я помещаю эти файлы в 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 ]

0 голосов
/ 08 марта 2012

В зависимости от сложности файла свойств, вы можете использовать возможность фильтра плагинов ресурсов для изменения значения на основе профилей maven. Например, если вы хотите иметь свойство с именем location, вы можете определить dev и производственный профиль, а затем установить значение для свойства 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>

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

0 голосов
/ 15 марта 2012

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

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

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

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

0 голосов
/ 08 марта 2012

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

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

...