Mengalami masalah ini di Spring Boot 1.1.5 dan 1.1.6 - Saya memuat sumber daya classpath menggunakan anotasi @Value, yang berfungsi dengan baik ketika saya menjalankan aplikasi dari dalam STS (3.6.0, Windows). Namun, ketika saya menjalankan paket mvn dan kemudian mencoba menjalankan toples, saya mendapatkan pengecualian FileNotFound.
Sumber daya, message.txt, ada di src / main / resources. Saya telah memeriksa toples dan memverifikasi bahwa itu berisi file "message.txt" di tingkat atas (tingkat yang sama dengan application.properties).
Inilah aplikasinya:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements CommandLineRunner {
private static final Logger logger = Logger.getLogger(Application.class);
@Value("${message.file}")
private Resource messageResource;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... arg0) throws Exception {
// both of these work when running as Spring boot app from STS, but
// fail after mvn package, and then running as java -jar
testResource(new ClassPathResource("message.txt"));
testResource(this.messageResource);
}
private void testResource(Resource resource) {
try {
resource.getFile();
logger.debug("Found the resource " + resource.getFilename());
} catch (IOException ex) {
logger.error(ex.toString());
}
}
}
Pengecualian:
c:\Users\glyoder\Documents\workspace-sts-3.5.1.RELEASE\classpath-resource-proble
m\target>java -jar demo-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.1.5.RELEASE)
2014-09-16 08:46:34.635 INFO 5976 --- [ main] demo.Application
: Starting Application on 8W59XV1 with PID 5976 (C:\Users\glyo
der\Documents\workspace-sts-3.5.1.RELEASE\classpath-resource-problem\target\demo
-0.0.1-SNAPSHOT.jar started by glyoder in c:\Users\glyoder\Documents\workspace-s
ts-3.5.1.RELEASE\classpath-resource-problem\target)
2014-09-16 08:46:34.640 DEBUG 5976 --- [ main] demo.Application
: Running with Spring Boot v1.1.5.RELEASE, Spring v4.0.6.RELEA
SE
2014-09-16 08:46:34.681 INFO 5976 --- [ main] s.c.a.AnnotationConfigA
pplicationContext : Refreshing org.springframework.context.annotation.Annotation
ConfigApplicationContext@1c77b086: startup date [Tue Sep 16 08:46:34 EDT 2014];
root of context hierarchy
2014-09-16 08:46:35.196 INFO 5976 --- [ main] o.s.j.e.a.AnnotationMBe
anExporter : Registering beans for JMX exposure on startup
2014-09-16 08:46:35.210 ERROR 5976 --- [ main] demo.Application
: java.io.FileNotFoundException: class path resource [message.
txt] cannot be resolved to absolute file path because it does not reside in the
file system: jar:file:/C:/Users/glyoder/Documents/workspace-sts-3.5.1.RELEASE/cl
asspath-resource-problem/target/demo-0.0.1-SNAPSHOT.jar!/message.txt
2014-09-16 08:46:35.211 ERROR 5976 --- [ main] demo.Application
: java.io.FileNotFoundException: class path resource [message.
txt] cannot be resolved to absolute file path because it does not reside in the
file system: jar:file:/C:/Users/glyoder/Documents/workspace-sts-3.5.1.RELEASE/cl
asspath-resource-problem/target/demo-0.0.1-SNAPSHOT.jar!/message.txt
2014-09-16 08:46:35.215 INFO 5976 --- [ main] demo.Application
: Started Application in 0.965 seconds (JVM running for 1.435)
2014-09-16 08:46:35.217 INFO 5976 --- [ Thread-2] s.c.a.AnnotationConfigA
pplicationContext : Closing org.springframework.context.annotation.AnnotationCon
figApplicationContext@1c77b086: startup date [Tue Sep 16 08:46:34 EDT 2014]; roo
t of context hierarchy
2014-09-16 08:46:35.218 INFO 5976 --- [ Thread-2] o.s.j.e.a.AnnotationMBe
anExporter : Unregistering JMX-exposed beans on shutdown
sumber
classpath:filename
sehingga file keystore dapat dibaca dari dalam toples.Jika Anda menggunakan kerangka kerja Spring maka membaca
ClassPathResource
ke dalamString
cukup sederhana menggunakan kerangka SpringFileCopyUtils
:sumber
Jika Anda ingin menggunakan file:
sumber
ketika proyek boot spring berjalan sebagai toples dan perlu membaca beberapa file di classpath, saya menerapkannya dengan kode di bawah ini
sumber
Saya telah membuat kelas ClassPathResourceReader dengan cara java 8 untuk membuat file yang mudah dibaca dari classpath
Pemanfaatan:
sumber
Saya menemukan batasan ini juga dan membuat perpustakaan ini untuk mengatasi masalah ini: spring-boot-jar-resources Pada dasarnya Anda dapat mendaftarkan customLoader kustom dengan Spring Boot yang mengekstrak sumber daya classpath dari JAR sesuai kebutuhan, secara transparan.
sumber
sumber
Jersey perlu botol yang belum dibuka.
sumber
sumber
Berdasarkan jawaban Andy, saya menggunakan yang berikut untuk mendapatkan aliran input dari semua YAML di bawah direktori dan sub-direktori dalam sumber daya (Perhatikan bahwa jalur yang dilewati tidak dimulai dengan
/
):sumber
Saya juga terjebak dalam situasi yang sama tetapi tidak persis sama, ingin membaca file JSON dari folder resources.src / main / resources Karena itu tuliskan kode seperti ini di bawah ini.
Ada berbagai Cara yang tercantum di sini untuk membaca file f classpath di Spring Boot Application.
@Value ("classpath: test.json") sumber daya sumber daya pribadi;
sumber daya swasta;
Sekarang, kode ini berfungsi dengan baik begitu saya menjalankannya menggunakan, mvn: spring-boot: run tetapi segera setelah saya membangun dan mengemas aplikasi menggunakan maven dan menjalankannya sebagai toples yang dapat dieksekusi sederhana saya mendapatkan pengecualian. Ayo maju dan cari solusinya sekarang.
Menggunakan InputStream adalah apa yang saya temukan jawabannya dalam kasus saya: -
Spring Bekerja pada Konsep Jar Gendut, karena itu sangat Sulit karena berperilaku berbeda di Eclipse dan saat Anda menjalankan sebagai guci.
sumber
Mengenai pesan kesalahan awalnya
Kode berikut dapat membantu, untuk menemukan solusi untuk masalah jalur:
Dengan ini Anda dapat menentukan, di mana aplikasi mengharapkan file yang hilang. Anda dapat menjalankan ini dalam metode utama aplikasi Anda.
sumber