Rumah >Java >javaTutorial >Mengapa Sumber Classpath Hilang Apabila Berjalan Sebagai JAR?

Mengapa Sumber Classpath Hilang Apabila Berjalan Sebagai JAR?

DDD
DDDasal
2024-11-03 16:50:03787semak imbas

Why Does Classpath Resource Missing When Running As JAR?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn