相信大家mvn package打包成jar包后放到服务器上面运行后遇到一些很头疼的问题,怎么按照百度、gpt、csdn上面的博客修改就是成功不了
但是!今天!博主带着自己尝试多次的血泪经验为大家解答以上三大问题!
接下来以“代码+解析”的方式解析大家的问题
一、无主属性问题
报错如下图
这是因为我们pom.xml文件中没有设定主属性导致的,
如图按照格式添加程序运行的主类
切记,如果你的配置文件中含有<skip>true</skip>一定要注释掉,否则就会忽略(skip)掉主属性
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 这通常用于确保版本的一致性和可维护性 -->
<version>${spring-boot.version}</version>
<configuration>
<!--主属性,指定应用的主类-->
<mainClass>com.example.sensor2.Sensor2Application</mainClass>
<!-- <skip>true</skip>-->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
按照上图这样修改就不会报错啦
二、外部jar未导入报错
这种一般报错就是主类外部jar包中封装好的类和功能无法找到和使用
大家可以看到这里报错NoClassDefFound说找不到相关类
其实这个类存在于我的外部jar包之中,我这边没有成功导入到我目前构建的jar包,所以才会报错
接下来我查阅了网上的资料,我将我要导入的外部jar放置到文件主目录下面的lib文件夹中
如下图所示
接着我在pom.xml文件中编写外部jar包依赖
<!--外部jar包,根据自己的实际情况按照模板修改-->
<dependency>
<groupId>rk.netDevice</groupId>
<artifactId>NetDeviceSDKP2</artifactId>
<version>V2.2.7</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/NetDeviceSDKP2_V2_2_7.jar</systemPath>
</dependency>
然后!我打包重新运行的时候还是会报错啊啊啊!
其实我们还差一步没有实现
需要在<build></build>目录中编写<resources></resources>实现指定要在jar中输出的东西
<!--每个标签定义了一组要包含在构建输出中的资源文件-->
<resources>
<!--如果还有其他资源文件夹,比如 lib 文件夹,则也可以继续配置 -->
<resource>
<directory>lib</directory>
<targetPath>/BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
再次运行这个问题就解决啦,但是运行会有其他错误要解决,让我们来看看下一个问题
三、DataSource: 'url' 报错
报错内容如下
这个需要分两步走
(1)第一步:检查自己数据库配置正确、依赖配置正确
这个你们自己检查好好就行啦,博主要主要讲解第二步!
主要是application.yml配置和pom.xml相关依赖问题
application.yml配置
server:
port: 8082
spring:
datasource:
url: jdbc:mysql://175.27.194.97:3306/Sensor2?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: 不告诉你
password: 不告诉你
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
minimum-idle: 5
idle-timeout: 30000
maximum-pool-size: 10
pool-name: HikariCP
max-lifetime: 2000000
connection-timeout: 30000
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
pom.xml相关依赖问题
把这几个一股脑导进去就行(如果有问题的话可以需要看看看看版本兼不兼容问题哦)
<!--mysql数据库驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--JDBC依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--外部jar包-->
<dependency>
<groupId>rk.netDevice</groupId>
<artifactId>NetDeviceSDKP2</artifactId>
<version>V2.2.7</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/NetDeviceSDKP2_V2_2_7.jar</systemPath>
</dependency>
<!-- Mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
(2)第二步:配置pom.xml依赖手动把application.yml依赖打进去
如果反复确认过自己的配置和依赖一点问题都没有,但是还是报错,那么我们检查jar包发现没有application.yml文件,那就是没有打进去
我们手动打一下,跟上面外部jar包未导入报错处理方式十分相同
需要在<build></build>目录中编写<resources></resources>实现指定要在jar中输出的东西
<resources>
<!--src/main/resources任何在这个目录中的文件都会被包含在最终的 JAR 文件中-->
<resource>
<directory>src/main/resources</directory> <!-- 确保 src/main/resources 目录包含在 JAR 中 -->
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!-- 如果还有其他资源文件夹,比如 lib 文件夹,则也可以继续配置 -->
<resource>
<directory>lib</directory>
<targetPath>/BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
四、占用端口报错
怎么还有问题呢,真烦,让我们来看第四个问题!
这个问题是最简单的
直接在application.yml文件中换一个端口就行
然后成功运行,大功告成
以上四个问题都是博主经历过的(也不知道打个jar为啥会碰到这么多问题),诶个问题都踩了一个雷,希望大家看了这篇博客会对大家有帮助!!!
五、完整pom.xml配置模板
一下是一个pom.xml配置模板(汇集了上述问题的解决方案),大家需要可以直接拿去用呀
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Sensor2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Sensor2</name>
<description>Sensor2</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql数据库驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--JDBC依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--外部jar包-->
<dependency>
<groupId>rk.netDevice</groupId>
<artifactId>NetDeviceSDKP2</artifactId>
<version>V2.2.7</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/NetDeviceSDKP2_V2_2_7.jar</systemPath>
</dependency>
<!-- Mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 这通常用于确保版本的一致性和可维护性 -->
<version>${spring-boot.version}</version>
<configuration>
<!--主属性,指定应用的主类-->
<mainClass>com.example.sensor2.Sensor2Application</mainClass>
<!-- <skip>true</skip>-->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!--每个标签定义了一组要包含在构建输出中的资源文件-->
<resources>
<!--src/main/resources任何在这个目录中的文件都会被包含在最终的 JAR 文件中-->
<resource>
<directory>src/main/resources</directory> <!-- 确保 src/main/resources 目录包含在 JAR 中 -->
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!-- 如果还有其他资源文件夹,比如 lib 文件夹,则也可以继续配置 -->
<resource>
<directory>lib</directory>
<targetPath>/BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
</build>
</project>
标签:lib,包未,Jar,boot,jar,报错,spring,org
From: https://blog.csdn.net/m0_73450461/article/details/143078993