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>