我从Spring Boot Jar运行而不是通过Eclipse运行ClassNotFoundException

时间:2018-07-24 18:19:45

标签: java spring eclipse maven spring-boot

我有一个带有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可以构建它。但是运行它会创建异常。

谢谢大家。

1 个答案:

答案 0 :(得分:0)

这是由ClassLoader引起的,使用java -jar运行的SpringBoot具有自己的ClassLoader。它将从BOOT-INF / classes和BOOT-INF / lib加载Class,但是Eclipse会将所有依赖项添加到classpath。因此Eclipse可以找到Class。您可以检出pom.xml。