Maven: добавить внешние ресурсы

Я создаю исполняемый файл JAR с Maven, что означает, что вы запускаете его с "java -jar file.jar".

Я хочу полагаться на определенные пользователем свойства (просто файл, содержащий ключи / значения), на этапе разработки я помещал свой файл "user.properties" в папку maven / src / main / resources /.

Мой файл свойств загружен с:

final Properties p = new Properties();
final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

Теперь я хочу сохранить этот файл вне JAR и иметь что-то вроде этого:

- execution_folder
   |_ file.jar
   |_ config
      |_ user.properties

Я пробовал многие вещи с помощью плагинов maven, таких как maven-jar-plugin, maven-surefire-plugin и maven-resources-plugin, но я не могу заставить его работать...

Заранее спасибо за помощь!

2 ответа

Решение

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

Сначала я добавляю папку config в classpath:

<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Class-Path>config/</Class-Path>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
</plugins>
</build>

Я загружаю ресурсы так же, как и раньше:

final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

И если вы хотите сохранить свои примеры файлов ресурсов в репозитории и удалить их из вашей сборки:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>user.properties</exclude>
                <exclude>conf/hibernate.cfg.xml</exclude>
            </excludes>
        </resource>
    </resources>
</build>

Рядом с файлом jar я добавляю папку конфигурации, содержащую все необходимые мне файлы ресурсов.

Результат:

  • user.properties можно загрузить с помощью getResourceAsStream
  • другие библиотеки, использующие определенные ресурсы (я не буду спорить, но я нахожу это... не очень хорошим) могут загружать свои ресурсы без каких-либо проблем.

Спасибо за помощь, и я надеюсь, что она может кому-нибудь когда-нибудь помочь!

Как я уже упоминал в комментарии - похоже, что вы хотите использовать user.properties файл просто как текстовый файл, который лежит помимо вашей банки. Если это так, то использовать его довольно просто - каталог, содержащий ваш файл jar, является текущим каталогом при проверке во время выполнения. Это означает, что все, что вам нужно, это:

properties.load(new FileInputStream("config/user.properties"));

не пытаясь вставить в classpath проекта.

И если что-то еще нужно сделать, это просто скопировав ваши свойства из каталога ресурсов в целевой, чтобы избежать хлопот, связанных с выполнением этого вручную. Это может быть достигнуто с помощью maven-antrun-plugin:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <mkdir dir="${project.build.directory}" />
                            <copy file="${basedir}/src/main/resources/user.properties" tofile="${project.build.directory}/config/user.properties" />
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Другие вопросы по тегам