Springboot Devtools 不热重载?

问题描述 投票:0回答:2

我已经有一段时间没有使用spring了,我正在尝试使用spring boot开发工具来执行热重载。我已从 start.spring.io 项目生成器导入了 Web 和 Spring Boot 依赖项,并为“/hello”创建了 uri。我可以运行该项目,但更改 uri 值不会热重载,并且我不相信热重载正在工作。根据我在互联网上搜索的结果,唯一必要的步骤是在 pom 文件中添加热重载依赖项:

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

我的整个pom.xml文件如下(从start.spring.io网站生成):

<?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.4.0</version>
                <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.java</groupId>
        <artifactId>java_app</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>java_app</name>
        <description>Web Project</description>

        <properties>
                <java.version>11</java.version>
        </properties>

        <dependencies>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                </dependency>

                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-devtools</artifactId>
                        <scope>runtime</scope>
                        <optional>true</optional>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-test</artifactId>
                        <scope>test</scope>
                </dependency>
        </dependencies>

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

</project>

我的网络uri文件如下(可以工作,但没有热重载):

package com.java.java_app;
  
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class JavaAppApplication {

        public static void main(String[] args) {
                SpringApplication.run(JavaAppApplication.class, args);
        }

        @GetMapping("/hello")
        public String hello(@RequestParam(value = "name", defaultValue = "World") String name){
                return String.format("Hello %s!", name);
        }

}

这是一个我认为可以构建的简单应用程序,所以我很困惑需要哪些额外的必要步骤才能使热重载工作。除了添加依赖项之外,这里似乎没有记录(https://www.baeldung.com/spring-boot-devtools)。如果重要的话我正在运行 ubuntu 20.04。

编辑:

我正在端口 :8080 上的终端中运行应用程序,并在应用程序运行时使用 vim 修改 uri 文件。由于 java 有很多适用于各种 IDE 的插件,有人建议值得一提。

java spring maven pom.xml hot-reload
2个回答
1
投票

如果您没有使用 IDE,您可以使用

./mvnw compile
,项目将在编辑器运行时重新编译。


0
投票

如果您不使用 IDE,有一种方法可以进行热重载

对于 vim 用户

// Add below into your ~/.vim/ftplugin/java.vim
function! SearchFileBackwards(fn)
    let fp = expand('%:p')
    let pos = len(fp) - 1
    while pos > 0
        let pom = ""
        if fp[pos] == '/'
            let pom = strpart(fp, 0, pos + 1) . a:fn
            if filereadable(pom)
                break
            endif
        endif
        let pos = pos - 1
    endwhile
    return pom
endfunction

function! BuildMavenProject()
    let pom = SearchFileBackwards("pom.xml")
    if pom != ""
        exec '!mvn -f '.SearchFileBackwards("pom.xml").' compile'
    else
        echohl WarningMsg | echo "No pom.xml found." | echohl None
    endif
endfunction

" comment out below line to enable automatic build on maven project.
" autocmd BufWritePost *.java :call BuildMavenProject()

" Press <F8> to build current maven project.
nnoremap <buffer> <silent> <F8> :call BuildMavenProject()<CR>

如果您使用 nvim,这里是代码

// this file should be created in ~/.config/nvim/ftplugin/java.lua
function SearchFileBackwards(fn)
  local fp = vim.fn.expand('%:p')
  local pos = #fp
  local pom = ""
  while pos > 0 do
    if fp:sub(pos, pos) == '/' then
      pom = fp:sub(1, pos) .. fn
      if vim.fn.filereadable(pom) == 1 then
        break
      end
    end
    pos = pos - 1
  end
  return pom
end

function BuildMavenProject()
    local pom = SearchFileBackwards("pom.xml")
    if pom ~= "" then
        vim.fn.system('mvn -f ' .. pom .. ' compile')
    else
        vim.api.nvim_echo({{ "No pom.xml found.", "WarningMsg" }}, true, {})
    end
end

vim.api.nvim_buf_set_keymap(0, "n", "<F8>", ":lua BuildMavenProject()<CR>", { silent = true })
vim.api.nvim_command('autocmd BufWritePost *.java lua BuildMavenProject()')
© www.soinside.com 2019 - 2024. All rights reserved.