Rumah  >  Artikel  >  Java  >  Mengapa Aplikasi But Spring Saya Gagal Mencari Sumber Classpath Apabila Dijalankan sebagai JAR?

Mengapa Aplikasi But Spring Saya Gagal Mencari Sumber Classpath Apabila Dijalankan sebagai JAR?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 11:25:02198semak imbas

Why Does My Spring Boot Application Fail to Find Classpath Resources When Run as a JAR?

Sumber Classpath Tidak Ditemui Semasa Berjalan sebagai JAR

Isu ini boleh dihadapi semasa memuatkan sumber classpath menggunakan anotasi @Value dalam Spring Aplikasi but. Walaupun ia berfungsi dengan betul apabila dijalankan daripada IDE seperti STS, menjalankan fail jar yang dijana melalui pakej mvn menghasilkan FileNotFoundException.

Menangani Isu

Alasan asasnya ialah sumber itu .getFile() menjangkakan sumber akan tersedia secara langsung pada sistem fail. Walau bagaimanapun, apabila dijalankan sebagai JAR, sumber dibungkus dalam arkib, menjadikan pendekatan itu tidak berkesan.

Penyelesaian

Untuk menyelesaikan isu ini, gantikan getFile() dengan getInputStream (). Kaedah ini membolehkan anda mengakses kandungan sumber tanpa mengira lokasinya. Berikut ialah kod yang diubah suai:

<code class="java">@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 {
            InputStream inputStream = resource.getInputStream();
            logger.debug("Found the resource " + resource.getFilename());
        } catch (IOException ex) {
            logger.error(ex.toString());
        }
    }
}</code>

Atas ialah kandungan terperinci Mengapa Aplikasi But Spring Saya Gagal Mencari Sumber Classpath Apabila Dijalankan 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