tutorial que proyecto pom espaƱol desde crear consola comandos java maven jar maven-resources-plugin maven-jar-plugin

java - que - Maven: agregar recursos externos



pom maven (2)

Estoy construyendo un archivo jar ejecutable con maven, lo que significa que lo ejecuta con "java -jar file.jar".

Quiero confiar en las propiedades definidas por el usuario (solo un archivo que contiene claves / valores), durante la fase de desarrollo estaba colocando mi archivo "user.properties" en la carpeta maven / src / main / resources /.

Mi archivo de propiedad está cargado con:

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

Ahora, quiero mantener ese archivo fuera del JAR y tener algo como esto:

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

Intenté muchas cosas con los plugins maven como maven-jar-plugin, maven-surefire-plugin y maven-resources-plugin pero no puedo hacerlo funcionar ...

¡Gracias de antemano por tu ayuda!


Como mencioné en el comentario, parece que desea utilizar el archivo user.properties simplemente como un archivo de texto que se encuentra junto a su jar. Si ese es el caso, entonces usarlo es bastante simple: el directorio que contiene su archivo jar es el directorio actual cuando se verifica durante el tiempo de ejecución. Eso significa que todo lo que necesitas es:

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

sin tratar de poner en el classpath del proyecto.

Y si hay algo más que hacer, simplemente copiando sus propiedades desde el directorio de recursos al objetivo para evitar el alboroto de hacerlo a mano. Eso se puede lograr con 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>


Encontré lo que necesitaba usando solo la configuración de maven.

Primero agrego la carpeta config a la ruta de clases:

<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>

Cargo los recursos de la misma manera que antes:

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

Y si desea mantener sus archivos de recursos de ejemplo en su repositorio y eliminarlos de su compilación:

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

Junto al archivo jar, agrego una carpeta de configuración que contiene todos los archivos de recursos que necesito.

El resultado es:

  • user.properties se puede cargar usando getResourceAsStream
  • otras bibliotecas que dependen de recursos específicos (no discutiré, pero creo que ... no tan bueno) pueden cargar sus recursos sin ningún problema.

Gracias por la ayuda, y espero que pueda ayudar a alguien algún día.