Sumber Classpath Hilang Semasa Berjalan Sebagai JAR
Apabila memuatkan sumber classpath menggunakan anotasi @Value, seseorang mungkin menemui fail yang tidak ditemui pengecualian semasa menjalankan aplikasi sebagai fail JAR. Walaupun sumber terdapat dalam direktori src/main/resources dan disahkan dalam fail JAR, isu ini timbul disebabkan percanggahan dalam cara sumber laluan kelas dikendalikan dalam konteks yang berbeza.
Memahami Isu
Masalahnya terletak pada penggunaan resource.getFile(). Kaedah ini menjangkakan sumber boleh diakses pada sistem fail dan tidak boleh mengendalikan sumber yang bersarang dalam fail JAR. Apabila menjalankan aplikasi dalam STS, kaedah ini berfungsi kerana sumber itu boleh diakses secara langsung pada sistem fail. Walau bagaimanapun, apabila dijalankan daripada fail JAR, sumber itu terletak dalam fail JAR dan tidak boleh diakses secara langsung pada sistem fail.
Penyelesaian Alternatif
Untuk menyelesaikan masalah ini isu, adalah disyorkan untuk menggunakan resource.getInputStream() dan bukannya resource.getFile(). Kaedah ini membolehkan anda mengakses kandungan sumber tanpa mengira lokasinya. Berikut ialah contoh:
<code class="java">try (BufferedReader reader = new BufferedReader(new InputStreamReader(messageResource.getInputStream()))) { // Read and process the resource's content here }</code>
Pendekatan ini akan memastikan bahawa sumber diakses dengan betul apabila menjalankan aplikasi sebagai fail JAR, menghapuskan fail yang tidak dijumpai pengecualian.
Atas ialah kandungan terperinci Mengapa Sumber Classpath Hilang Apabila Berjalan Sebagai JAR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!