Saltar al contenido

Recursos y carga de configuración en el proyecto maven

Agradeceríamos tu apoyo para compartir nuestras reseñas con relación a las ciencias informáticas.

Solución:

Puedes usar getResourceAsStream() método de java.lang.Class como lo has hecho tú, pero hay que añadir / antes del camino.


Esta pregunta es engañosa.

1. Dos métodos con el mismo nombre

En primer lugar, existen dos métodos. del mismo nombre y la misma firma en estas dos clases:

java.lang.Class
java.lang.ClassLoader

Tienen el mismo nombre: getResource(String) (y getResourceAsStream(String) es igual).

2. Aceptan params de diferente formato

Entonces, el parámetro de ellos tiene un formato diferente:

  • El método java.lang.Class.getResouce() acepta camino con y sin el líder /, dando como resultado diferentes estrategias de búsqueda de recursos. Si un camino no tiene /Java buscará el recurso en el paquete/carpeta donde se encuentra el .class reside el archivo. si tiene /Java comenzará la búsqueda desde la raíz de classpath.
  • El método java.lang.ClassLoader.getResource() acepta solo camino sin /, porque siempre busca desde classpath. En una ruta basada en classpath, / no es un carácter válido. *

    *: Como dice esta respuesta: this.getClass().getClassLoader().getResource(“…”) y NullPointerException

¿Cómo agregar una carpeta a classpath? En Eclipse, resolvemos el menú contextual de un proyecto: “Ruta de compilación” – “Configurar ruta de compilación…” y agregamos alguna carpeta a la ruta de compilación.

3. Cuando se trata de Maven

Por fin, si un proyecto es un proyecto Maven, por defecto src/main/resources está en el classpath, por lo que podemos usar

Class.getResource("/path-to-your-res");

o,

ClassLoader.getResource("path-to-your-res");

para cargar cualquier cosa debajo src/main/resources.

Si queremos añadir otra carpeta de recursos, como has comentado, se hace en pom.xml. Y también se agregan a classpath, hecho por Maven. No se necesita configuración adicional.

4. Ejemplo

Por ejemplo, si su config.ini está debajo src/main/resources/settings, myAvatar.gif por debajo src/main/imagestu puedes hacer:

En pom.xml:


    
        
            src/main/images
        
    

En codigo:

URL urlConfig = MyClass.class.getResource("/settings/config.ini"); //by default "src/main/resources/" is in classpath and no config needs to be changed.
InputStream inputAvatar = MyClass.class.getResourceAsStream("/myAvatar.gif"); //with changes in pom.xml now "src/main/images" is counted as resource folder, and added to classpath. So we use it directly.

debemos usar / arriba.

O, con ClassLoader:

URL urlConfig = MyClass.class.getClassLoader().getResource("settings/config.ini"); //no leading "/"!!!
InputStream inputAvatar = MyClass.class.getClassLoader().getResourceAsStream("myAvatar.gif"); //no leading "/"!!!

Creo que encontré la solución. Como escriben Juned Ahsan y mR_fr0g, necesito usar la clase ClassLoader, en lugar de this.getClass().getResource(). Pero, solo funciona para la carpeta de recursos. Pero maven permite agregar otras carpetas como carpetas de recursos. Solo necesitaba agregar esta sección a pom.xml:


    
        
            src/main/config
        
    

Y el código Java de trabajo es:

InputStream image = this.getClass().getClassLoader().getResourceAsStream("images/image.png");
InputStream config = ClassLoader.getSystemResourceAsStream("config.xml");

public Preferences() 
    InputStream image = this.getClass().getClassLoader().getResourceAsStream("image.png");
    InputStream config = this.getClass().getClassLoader().getResourceAsStream("config.xml")
 

Te mostramos reseñas y calificaciones

Puedes añadir valor a nuestro contenido añadiendo tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *