Agregue un archivo de propiedades al classpath de IntelliJ

Estoy ejecutando un progtwig Java simple del IntelliJ IDE usando el menú Ejecutar-> Ejecutar. Funciona bien. Ahora quiero agregar log4j logging.

Agregué una carpeta de recursos debajo de mi raíz de proyecto. Agregué un archivo log4j.properties en esa carpeta. Cambié el código para registrar algo.

¿Cuál es la forma correcta de decirle a IntelliJ que incluya la carpeta de recursos en el classpath para que se vea el archivo de propiedades?

Con IntelliJ 8 pude adivinar como un mono borracho y eventualmente lograr que funcione. Tengo 9 ahora y no tengo éxito. He estado intentando durante una hora. ¿Qué tal una opción “Agregar a classpath” en alguna parte? / fume / vent / rant

Prueba esto:

  • Ir a la estructura del proyecto.
  • Seleccione su módulo.
  • Encuentra la carpeta en el árbol a la derecha y selecciónala.
  • Haga clic en el botón Fuentes que se encuentra sobre ese árbol (con la carpeta azul) para convertir esa carpeta en una carpeta de fonts.

En realidad, tiene al menos 2 formas de hacerlo, la primera forma la describe ColinD, simplemente configura la carpeta “resources” como la carpeta Sources en IDEA. Si los Patrones de recursos contienen la extensión de su recurso, se copiará en el directorio de salida cuando haga que el directorio de proyecto y salida sea automáticamente una ruta de clase de su aplicación.

Otra forma común es agregar directamente la carpeta “resources” a classpath. Ir a Estructura del proyecto | Módulos | Su módulo | Dependencias , haga clic en Agregar , Biblioteca de módulos de entrada única , especifique la ruta a la carpeta “recursos”.

Otra solución más sería poner el archivo log4j.properties directamente debajo de la raíz de origen de su proyecto (en el directorio del paquete predeterminado). Es lo mismo que la primera manera, excepto que no necesita agregar otra raíz de origen en la configuración de Rutas de módulo, el archivo se copiará en el directorio de salida en Crear.

Si desea probar con diferentes configuraciones de log4j, puede ser más fácil especificar un archivo de configuración personalizado directamente en la configuración Ejecutar / Depurar , los parámetros de VM archivados como:

-Dlog4j.configuration=file:/c:/log4j.properties .

¡Tengo el mismo problema y me molesta muchísimo!

Siempre pensé que estaba dispuesta a hacer como respuesta 2. Eso solía funcionar en Intellij 9 (ahora usa 10).

Sin embargo, me di cuenta de que al agregar estas líneas a mi archivo maven pom ayuda:

  ...   src/main/resources   ...  

Pasé bastante tiempo descifrando cómo hacer esto en Intellij 13x. Aparentemente, nunca agregué los archivos de propiedades a los artefactos que los requerían, que es un paso separado en Intellij. La configuración a continuación también funciona cuando tiene un archivo de propiedades compartido por varios módulos.

  • Vaya a la configuración de su proyecto (CTRL + ALT + MAYÚS + S)
  • En la lista, seleccione el módulo al que desea agregar uno o más archivos de propiedades.
  • A la derecha, selecciona la pestaña Dependencias.
  • Haga clic en el signo más verde y seleccione “Tarros o directorios”.
  • Ahora seleccione la carpeta que contiene los archivos de propiedad. (No he intentado incluir un archivo individual)
  • Intellij ahora le preguntará cuál es la “categoría” del archivo seleccionado. Elija “clases” (aunque no lo sean).
  • Ahora debe agregar los archivos de propiedades al artefacto. Intellij le dará el atajo que se muestra a continuación. Mostrará errores en la parte roja en la parte inferior y una “bombilla roja” que al hacer clic le muestra una opción para agregar los archivos al artefacto. También puede ir a la sección ‘artefactos’ y agregar los archivos a los artefactos manualmente.

enter image description here

Enfrentó un desafío similar al agregar archivos con extensiones .ini al classpath. Encontré esta respuesta , que es para agregarla a Preferencias -> Comstackdor -> Patrones de recursos -> […]; *. Ini

Para aquellos de ustedes que migran de Eclipse a IntelliJ o al revés, aquí hay una sugerencia cuando se trabaja con archivos de propiedades u otros archivos de recursos.

Es enloquecedor (me costó una noche entera averiguarlo) pero ambos IDE funcionan bastante diferente cuando se trata de buscar recursos / archivos de propiedad cuando se quiere ejecutar localmente desde su IDE o durante la depuración. (El empaquetado en .jar también es bastante diferente, pero eso está mejor documentado).

Supongamos que tiene una referencia de ruta relativa como esta en su código:

 new FileInputStream("xxxx.properties"); 

(lo cual es conveniente si trabaja con archivos .properties específicos de env que no desea empaquetar junto con su JAR)

INTELLIJ

(Uso 13.1, pero podría ser válido para más versiones)

El archivo xxxx.properties debe estar en el directorio PARENT del proyecto ROOT para poder ser recogido en tiempo de ejecución como este en IntelliJ. (El proyecto ROOT es donde reside la carpeta / src)

ECLIPSE

Eclipse está contento cuando el archivo xxxx.properties está en el proyecto ROOT.

¡Así que IntelliJ espera que el archivo .properties sea 1 nivel más alto que Eclipse cuando se lo menciona así!

Esto también afecta la forma en que tiene que ejecutar su código cuando tiene esta misma línea de código (nuevo FileInputStream (“xxxx.properties”);) en su archivo .jar exportado. Cuando quiera ser ágil y no desee empaquetar el archivo .properties con su jar, deberá ejecutar el jar como se muestra a continuación para hacer referencia al archivo .properties correctamente desde la línea de comando:

INTELLIJ EXPORTED JAR

 java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod 

ECLIPSE EXPORTED JAR

 java -jar some.jar 

donde el Eclipse exportó el archivo ejecutable solo esperará que el archivo .properties al que se hace referencia esté en la misma ubicación donde está el archivo .jar

Si alguna vez termina con el mismo problema con Scala y SBT:

  • Ir a la estructura del proyecto. El atajo es (CTRL + ALT + MAYÚS + S)

  • En la lista de la extrema izquierda, elija Configuración del proyecto> Módulos

  • En la lista de módulos a la derecha de eso, seleccione el módulo del nombre de su proyecto (sin la construcción) y elija la pestaña de fonts

  • En el medio, expanda la carpeta que la raíz de su proyecto para mí es /home//IdeaProjects/

  • Observe la sección Root de contenido en el lado derecho, las rutas rojas son directorios que no ha creado. Querrá poner el archivo de propiedades en un directorio de Recursos. Así que creé src/main/resources y puse log4j.properties en él. Creo que también puedes modificar la raíz del contenido para colocarlo donde quieras (no lo hice).

  • Ejecuté mi código con una configuración SBT y encontró mi archivo log4j.properties.

enter image description here

Tal vez esto es un poco fuera de tema, ya que la pregunta ya ha sido respondida, pero he experimentado un problema similar. En mi caso, solo algunos de los recursos de prueba de la unidad se copiaron en la carpeta de salida luego de la comstackción. Mi persistence.xml en la carpeta META-INF se copió, pero nada más .

Al final, “resolví” el problema cambiando el nombre de los archivos problemáticos, reconstruyendo el proyecto y luego cambiando los nombres de los archivos a los originales. No me preguntes por qué funcionó, pero así fue. Mi mejor suposición es que, de alguna manera, mi proyecto IntelliJ se había desincronizado un poco con el sistema de archivos y la operación de cambio de nombre desencadenó algún tipo de “reexploración de recursos” interno.

Tuve un problema similar con un archivo log4j.xml para una prueba de unidad, hice todo lo anterior. Pero me di cuenta de que era porque solo estaba volviendo a ejecutar una prueba fallida … si volví a ejecutar toda la clase de prueba, se recogió el archivo correcto. Esto está bajo Intelli-j 9.0.4