springboot的热部署和dubug

时间:2022-11-06 11:27:37

采用了项目聚合,产生一些不同,遇到的问题和解决方法分享下。

项目结构:

  rebuilder2 

    -htran  主项目

    -htran-api  

1、htran.pom

<parent>
<groupId>com.cq</groupId>
<artifactId>common-parent</artifactId>
<version>1.0.0-RELEASE</version>
<relativePath></relativePath>
</parent>
      <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
                    </jvmArguments>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.6.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>

2、IDEA配置

  RUN -> Edit configuraions -> '+' -> Remote ->右侧修改名称为debug

3、maven命令

clean spring-boot:run -pl htran

  由于采用了项目聚合,htran引入了htran-api同时还继承了ParentPom,所以直接在rebuild2 路径下 mvn clean spring-boot:run 会同时启动htran-api;而htran-api只是用来存放一些接口和实体类的,并没有application.java也不能运行,mvn在构建时就会产生 Unable to find a suitable main class异常,而直接在htran路径下执行mvn clean spring-boot:run又会报找不到htran-api的错误,所以在rebuild2 路径下添加  -pl htran。

4、先执行maven命令,再run刚刚配置的debug,就可以热部署+debug了

5、修改代码后要执行重新编译,快捷键是ctrl + shift + F9

 

6、如果只是想热部署而不是debug,那就去掉pom中的

                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
                    </jvmArguments>        

直接 clean spring-boot:run -pl htran,不需要配置debug

 

一些异常:

  找不到<parent>项目的pom文件。这是因为一般我们在使用idea时,会在setting中指定idea使用本地的maven库路径,而忽略了maven配置文件setting.xml中对本地库路径的设置,这样通过idea使用maven时会使用配置的路径,但直接使用mvn命令,则会由maven直接使用setting.xml的配置路径。这样手动添加到idea本地库的包maven就会找不到。

  包冲突:javax.persistance。 由于hibernate已经自带了javax.persistance,如果在其他地方引入了低版本的javax.persistance依赖,mvn在构建项目时如果先加载了低版本的包,就不会再加载高版本包,这就会出现各种错误。常见是各种 java.lang.NoSuchMethodError。排除低版本的依赖即可。但是直接用idea构建项目就不会有这个问题(也许idea能智能加载高版本包?

  java.lang.IllegalAccessException: Class org.springsource.loaded.ReloadableType can not access a member of class org.springframework.aop.framework.CglibAopProxy$ClassLoaderAwareUndeclaredThrowableStrategy with modifiers "public" 这个是springloaded版本问题,似乎和jvm版本也有关系,官方说是升级到1.2.6就解决了,但是我在用的时候还是会出现,但是不影响运行,不用管他。奇怪的写这个笔记的时候,想找到这个异常信息,又运行了一下,却又不抛异常了。编程真是神奇啊。。。