maven打包springboot项目不能运行的解决办法

前提是在开发工具中能正常运行,maven打包后无法运行。

打包后,进入打包文件路径

在dos下输出

java -version

显示jdk版本后,再

java -jar    xxxx.jar 

 

xxxx为你打包后的jar名称

 

 

 

 

解决办法有

1 在maven的pom.xml文件中,增加以下依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>

 

2 如果是eclipse中  还要指定jdk版本, IDEA开发工具中不用指定jdk版本,但是建议 代码编译时的JDK版本与运行时保持版本一致。

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

 

3 检查是否有maven插件依赖,和检查 开发工具中的maven是否配置正确。

在pom.xml中

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

 4  检查打包后,检查 是否将配置文件和依赖的jar文件 同时打包。

  Idea  中将 包含 配置文件的文件夹

   右键文件    Mark Directory as   -->  Test Resources Root 

 

  eclipse 除了将 包含配置文件的文件夹    Build Path --->   Use  as  Source Folder 之外

  在pom.xml中,增加以下配置,确保将配置文件也同时打包。

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<includes>
<!--包含文件夹以及子文件夹下所有资源-->
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>

 

 ===============切记,配置文件的路径要在src/main/java 目录下,然后打包就会打入到jar中

问题:

项目中需要用到从文件中加载json数据,如图放在conf目录下。

程序中用

XXX.class.getResource("app.json");

XXX.class.getClassLoader().getResourceAsStream("app.json")

都找不到该文件,报NullPointerException。类加载器只能加载classPath目录下面的文件,不能用这两种方式读取jar文件外部的文件。

解决方案:

参考网上博客...知道Maven项目会将src/main/resources目录中的所有文件都打包到jar中,那么上面的方法就可以用了。于是建resources目录,发现确实可行!

 

如果以上问题都排查无误后,在成功打包后,仍然无法正常运行

 如果出现以下异常

Exception in thread "main" java.lang.IllegalAccessException: Class org.springframework.boot.loader.MainMethodRunner 

can not access a member of class 你的springboot主函数入口类 with modifiers "public static"

那么 说明 你的主函数入口类 没有 public 修饰

我的问题就是 主函数入口类 的修饰符 没加public


在 开发工具中 可以正常运行, 打包后 不能正常运行。


做个记录,分享给有缘人。


 

posted @ 2019-07-10 11:18  javahepeng  阅读(6288)  评论(0编辑  收藏  举报