簡體   English   中英

當我從 Spring Boot Jar 運行但不是通過 Eclipse 時出現 ClassNotFoundException

[英]ClassNotFoundException when I run from a Spring Boot Jar, but not through Eclipse

我有一個帶有 Spring Boot 的多級 Maven 項目。

ParentProject
|_ Project1
   |_pom.xml
|_ LibraryProject
   |_pom.xml
|_ Project2
   |_pom.xml

對於 ParentProject,父項的定義如下:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-parent</artifactId>
   <version>1.5.9.RELEASE</version>
   <relativePath></relativePath>
</parent>

對於 Project1、LibraryProject 和 Project2:

<parent>
   <groupId>ParentProject</groupId>
   <artifactId>ParentProject</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <relativePath>..</relativePath>
</parent>

Project1 和 Project2 依賴於 LibraryProject 中的類。 當我從 Eclipse 執行時,Project1 和 Project2 都找到了它們的所有類以及 LibraryProject 中的所有類。 當我創建一個 Project1.jar 時

mvn clean install package

然后運行它,我在 LibraryProject 中的類上得到 ClassNotFoundExceptions。 LibraryProject 是 Project1 的依賴項,在 Project1 之前構建。

ParentProject 使用 spring-boot-parent 作為其父項。 它按以下順序構建:

1) LibraryProject
2) Project1
3) Project2

我引入了 maven-compiler-plugin、maven-jar-plugin、maven-remote-resources-plugin。

我只是沒有想法。 它在 eclipse 中編譯,maven 可以構建它。 但是運行它會產生異常。

謝謝大家。

這是ClassLoader造成的,SpringBoot用java -jar運行有它自己的ClassLoader。它會從BOOT-INF/classes和BOOT-INF/lib加載Class,但是Eclipse會將所有依賴添加到classpath中。 這樣 Eclipse 就可以找到 Class。 你可以檢出你的 pom.xml。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM