【问题标题】:ClassNotFoundException when I run from a Spring Boot Jar, but not through Eclipse当我从 Spring Boot Jar 运行而不是通过 Eclipse 运行时出现 ClassNotFoundException
【发布时间】:2018-07-24 18:19:44
【问题描述】:

我有一个使用 Spring Boot 的多级 Maven 项目。

父项目 |_ 项目1 |_pom.xml |_ 图书馆计划 |_pom.xml |_ 项目2 |_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 全新安装包

然后运行它,我在 LibraryProject 中的类上得到 ClassNotFoundExceptions。 LibraryProject 是 Project1 的依赖,在 Project1 之前构建。

ParentProject 使用 spring-boot-parent 作为其父项。它按以下顺序构建:

1) 图书馆项目 2) 项目1 3) 项目2

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

我只是没有想法。它在eclipse中编译,maven可以构建它。但是运行它会产生异常。

提前谢谢大家。

【问题讨论】:

  • 能否请您在所有 pom 文件中包含依赖部分和 &lt;parent&gt; 标签部分?另外,请向我们展示 ClassNotFoundExceptions 的堆栈跟踪。
  • 正如我所说,我是从未连接的计算机上输入的。我无法输入整个内容。
  • 为了诊断问题,我们需要更多信息。您可以稍后在可以访问时添加信息,和平。
  • 如果您有多个模块构建,则不应使用 spring-boot-parent 作为根的父级...有一个文档如何做到这一点,您必须通过依赖管理和导入范围 (BOM) ...进一步clean install package 是错误的并且重复部分...只有mvn clean package 就足够了...进一步哪些模块是真正的弹簧启动应用程序?
  • 所有项目都是 Spring Boot 项目(显然),由于 jar 的结构,在另一个中使用 1 个 spring boot jar 是不可能的。

标签: java spring eclipse maven spring-boot


【解决方案1】:

这是由 ClassLoader 引起的,使用java -jar 运行的 SpringBoot 有自己的 ClassLoader。它会从 BOOT-INF/classes 和 BOOT-INF/lib 加载 Class,但 Eclipse 会将所有依赖项添加到类路径中。所以 Eclipse 可以找到该类。你可以签出你的 pom.xml。

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多