723. 2024-06-15 17:02 采纳率: 25%
浏览 9

Springboot打包jar在本地终端运行java -jar后说未找到Mybits映射文件

Springboot打包jar在本地终端运行java -jar后说未找到Mybits映射文件

2024-06-14 17:06:50.588  INFO 29408 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2024-06-14 17:06:51.246  WARN 29408 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.
2024-06-14 17:06:51.336  INFO 29408 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-06-14 17:06:51.358  INFO 29408 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 7 ms. Found 0 JPA repository interfaces.
2024-06-14 17:06:51.491  WARN 29408 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.

但是我在IDEA里面运行是没错的,这是我的项目结构:

img

之后我又检查了一下打包后的jar文件,发现目录demo-0.0.1-SNAPSHOT\BOOT-INF\classes\com\example\demo\demos\web的所有文件夹里面都没有我的代码Dao,Entity还有controller和service那些,只有三个其他文件,我不知道是不是全部整合进来了?

img

之后我打开那三个文件看了一下,发现好像也不是
BasicController:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.example.demo.demos.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BasicController {
    public BasicController() {
    }

    @RequestMapping({"/hello"})
    @ResponseBody
    public String hello(@RequestParam(name = "name",defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

    @RequestMapping({"/user"})
    @ResponseBody
    public User user() {
        User user = new User();
        user.setName("theonefx");
        user.setAge(666);
        return user;
    }

    @RequestMapping({"/save_user"})
    @ResponseBody
    public String saveUser(User u) {
        return "user will save: name=" + u.getName() + ", age=" + u.getAge();
    }

    @RequestMapping({"/html"})
    public String html() {
        return "index.html";
    }

    @ModelAttribute
    public void parseUser(@RequestParam(name = "name",defaultValue = "unknown user") String name, @RequestParam(name = "age",defaultValue = "12") Integer age, User user) {
        user.setName("zhangsan");
        user.setAge(18);
    }
}

PathVariableController:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.example.demo.demos.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class PathVariableController {
    public PathVariableController() {
    }

    @RequestMapping(
        value = {"/user/{userId}/roles/{roleId}"},
        method = {RequestMethod.GET}
    )
    @ResponseBody
    public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId) {
        return "User Id : " + userId + " Role Id : " + roleId;
    }

    @RequestMapping(
        value = {"/javabeat/{regexp1:[a-z-]+}"},
        method = {RequestMethod.GET}
    )
    @ResponseBody
    public String getRegExp(@PathVariable("regexp1") String regexp1) {
        return "URI Part : " + regexp1;
    }
}

我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
            <version>2.7.18</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.30</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.7.18</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.18</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.0</version>
            </plugin>
        </plugins>
    </build>
    <packaging>war</packaging>
</project>

我的application.yml:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://47.93.153.170:3306/ren?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
    username: ren
    password: 123456789
  web:
    resources:
      static-locations: classpath:/templates/, classpath:/static/
logging:
  level:
    org.springframework.data.jpa: DEBUG
    com.zaxxer.hikari: DEBUG

我该怎么解决这个?是没有打包进来吗?还是全在另外三个文件里面了?还是我pom.xml配置有问题吗?

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-15 17:02
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的信息来看,主要的问题在于MyBatis的映射文件和相关的DAO接口没有被Spring Boot正确识别或加载。这可能由几个原因造成,包括但不限于:

    1. 资源路径配置不正确:确保你的MyBatis映射XML文件位于src/main/resources/META-INF/mybatis/mapper目录下,或者在application.ymlapplication.properties中指定了正确的资源位置。

    2. 扫描包配置缺失:在Spring Boot的配置中,你需要指定MyBatis的mapper接口和XML映射文件所在的包路径。这通常通过@MapperScan注解或者在application.yml/application.properties中的mybatis.mapper-locations属性来完成。

    3. POM配置问题:你的pom.xml中,虽然引入了MyBatis和MyBatis Plus的依赖,但是packaging属性被设置为了war,这可能导致资源文件在构建时没有被正确包含在最终的JAR文件中。对于Spring Boot应用,通常使用jar作为打包类型。

    为了解决这个问题,你可以尝试以下步骤:

    更新POM配置

    packaging属性更改为jar,确保所有相关依赖版本匹配你的Spring Boot版本。更新后的pom.xml应该类似于下面的样子:

    <packaging>jar</packaging>
    

    配置MyBatis

    application.yml中添加或确认以下配置:

    mybatis:
      type-aliases-package: com.example.demo.entity # 实体类包名
      mapper-locations: classpath*:META-INF/mybatis/mapper/*.xml # 映射文件的位置
    

    使用@MapperScan

    如果你有多个DAO接口,考虑在主配置类上使用@MapperScan注解来自动扫描这些接口:

    @SpringBootApplication
    @MapperScan("com.example.demo.Dao")
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    确认映射文件位置

    确认你的映射文件是否位于src/main/resources/META-INF/mybatis/mapper目录下,并且文件命名符合MyBatis的要求(通常是与DAO接口对应的命名)。

    重新打包并测试

    使用Maven命令行工具重新构建项目,然后再次尝试使用java -jar命令运行打包后的JAR文件,检查MyBatis的映射文件是否已经被正确加载。

    如果以上步骤都已确认无误,但问题仍然存在,可能需要进一步检查IDEA的构建配置,确保它与Maven的构建配置一致,以及确认是否有任何IDEA特有的设置影响了构建过程。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月15日

悬赏问题

  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework