Mi estructura de carpetas dentro de src es así:
src ├── main │ ├── java │ │ └── com │ │ └── organization │ │ └── projectname │ │ ├── Transformer.java │ │ └── Utils.java │ └── resources │ └── config └── test ├── java │ └── com │ └── organization │ └── projectname │ └── AppTest.java └── resources └── file └── test.txt y quiero leer el archivo test.txt .
Uso Maven y Eclipse, pero me gustaría que se ejecute el mismo código cuando empaqueto en JAR (con mvn package ) y cuando alguien se ejecuta dentro de IDE o por línea de comandos.
Mi intento aquí falla (se vuelve nulo):
InputStream input = Scorer.class.getResourceAsStream("file/test.txt"); System.out.println(input); // prints nullal igual que este intento (se vuelve nulo):
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL url = classLoader.getResource("file/test.txt"); System.out.println(url.getFile()); // prints null Estoy bastante seguro de que el archivo existe en esa ubicación dentro de src/test/resources/file/ , así que me pregunto qué más estoy haciendo mal.
¡Gracias!
Dado que test.txt está en src/test/resource , no estará disponible en el archivo jar ni cuando ejecute la aplicación en su IDE, a menos que esté ejecutando unidades de prueba. Aquí hay una introducción al diseño de directorio estándar
Sugiero moverlo en src/main/resource .
Pasar a src/main/resource permitirá que su IDE tenga el recurso disponible cuando ejecute o depure su proyecto.
Por otro lado, Maven podrá copiar los recursos en el contenedor cuando ejecute el objetivo del mvn package .
Para asegurarse de que el objetivo del mvn package copie los archivos en el Jar, simplemente agregue estas líneas en su proyecto pom:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**.txt</include> </includes> </resource> </resources> </build> Eche un vistazo al Complemento de recursos de Maven para comprender cómo escribir la configuración de <resource> .
Y preste atención a esto: si actualiza su archivo maven pom.xml, agregando una o más partes <resource> , esto no significa que, por el contrario, su IDE actualice el proyecto con este comportamiento/configuración (es decir, copie los recursos).
Entonces, cada vez que tenga que verificar tanto Maven pom.xml como la configuración del proyecto IDE.