¿Dónde debo colocar el archivo log4j.properties cuando utilizo los directorios convencionales de Maven?
¿Dónde debo colocar el archivo log4j.properties cuando utilizo los directorios convencionales de Maven?
Respuestas:
src/main/resources
es la "colocación estándar" para esto.
Actualización: lo anterior responde a la pregunta, pero no es la mejor solución. Vea las otras respuestas y los comentarios sobre esto ... probablemente no enviaría sus propias propiedades de registro con el jar, sino que lo dejaría al cliente (por ejemplo, servidor de aplicaciones, entorno de escenario, etc.) para configurar el registro deseado. Por lo tanto, ponerlo src/test/resources
es mi solución preferida.
Nota: Hablando de salir de la configuración de registro concreto para el cliente / usuario, debe considerar sustituir log4j
con slf4j
en su aplicación.
resources
y log4j.properties
en la carpeta mencionada en la respuesta.
src/main/resources
se copiarán por defecto atarget/classes
Solo ponerlo lo src/main/resources
agrupará dentro del artefacto. Por ejemplo, si su artefacto es un JAR, tendrá el log4j.properties
archivo dentro, perdiendo su punto inicial de hacer que el registro sea configurable.
Por lo general, lo pongo src/main/resources
y lo configuro para que se envíe al destino de la siguiente manera:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Además, para que log4j lo vea realmente, debe agregar el directorio de salida a la ruta de clase. Si su artefacto es un JAR ejecutable, probablemente haya utilizado el complemento maven-assembly para crearlo. Dentro de ese complemento, puede agregar la carpeta actual del JAR a la ruta de clase agregando una Class-Path
entrada de manifiesto de esta manera:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Ahora el archivo log4j.properties estará justo al lado de su archivo JAR, configurable independientemente.
Para ejecutar su aplicación directamente desde Eclipse, agregue el resources
directorio a su classpath en su configuración de ejecución: Run->Run Configurations...->Java Application->New
seleccione la Classpath
pestaña, seleccione Advanced
y busque su src/resources
directorio.
${project.build.directory}
o debería editarse en la ruta real en la que vive el proyecto en mi disco local?
Algunas cuentas de "minería de datos" src/main/resources
son el lugar típico.
Resultados en la búsqueda de código de Google :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
no resource
, si no recuerdo mal.
resource
fue solo un error tipográfico.
Los recursos utilizados para inicializar el proyecto se colocan preferiblemente en la carpeta src / main / resources . Para permitir la carga de estos recursos durante la compilación, uno simplemente puede agregar entradas en el proyecto pom.xml en maven como recurso de compilación
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Otros archivos .properties también se pueden guardar en esta carpeta utilizada para la inicialización. El filtrado se establece como verdadero si desea tener algunas variables en los archivos de propiedades de la carpeta de recursos y llenarlas desde los archivos de propiedades de filtros de perfil, que se guardan en src / main / filters que se configura como perfiles pero es un caso de uso completamente diferente . Por ahora, puedes ignorarlos.
Este es un gran recurso de complementos de recursos de Maven , es útil, solo navega a través de otras secciones también.
Cuando colocar archivos de recursos en otra ubicación no es la mejor solución que puede usar:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Por ejemplo, cuando los archivos de recursos (por ejemplo, jaxb.properties) profundizan en los paquetes junto con las clases Java.
Si su archivo log4j.properties o log4j.xml no se encuentra en src / main / resources, use este PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Agregue el siguiente código de las etiquetas de recursos en su pom.xml dentro de las etiquetas de compilación. significa que las etiquetas de recursos deben estar dentro de las etiquetas de compilación en su pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>