本文主要介绍基于Idea的SpringBoot多模块打包中遇到的各种问题以及解决方法

基本概况介绍:

    小弟之前是用的myeclipse进行的开发,但是在建立多模块的时候却错误的使用了web archtype,然后强转的SpringBoot,在工具上能正常跑起来,但是打包的时候,出现了打包不完整,打包无法聚合在一起,以及打的包没有主类等等问题。灰心丧气之下,无奈转为了idea开发,基于已有代码进行项目框架重构,希望问题能够得到解决。

    问题一:idea默认的language level是1.5,但是一般不用1.5了,我用的1.8,即使在structure里面进行了修改,一旦对代码或者pom进行修改后,idea又会重新变成1.5,参考了网上教程,说是在pom文件下加入标签就可以一劳永逸,由于采用的多模块,此方法未能解决问题。后来无意重建项目框架的时候,发现在选用project sdk时,只要不不用默认的project Sdk(1.8),而使用jdk(1.8),就不会发生转成1.5的问题。

 

    问题二:打包时默认会进行测试,而由于多模块架构,测试一直失败,于是我便想到跳过测试。跳过测试的三种方法:

        1、在pom文件里加插件:该方法我未曾使用过,因为是多模块结构以及springboot的<parant>原因,导致每个pom都要添加,麻烦

        <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build>

        2、打开控制台窗口,cd到父项目下,执行命令(如果未配置maven环境变量请自行配置):mvn clean install -DskipTests

        3、同上,执行命令:mvn clean install -Dmaven.test.skip=true

         这里附上Maven的安装配置教程:

    问题三:这个时候打包应该会出问题,首先是因为plugin的原因,SpringBoot自带的plugin会使模块找不到依赖。解决办法:

        修改父项目pom:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>    <!--默认关掉单元测试 -->
            </configuration>
        </plugin>
    </plugins>
</build>

        修改web模块pom:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!-- 指定该Main Class为全局的唯一入口 -->
        <mainClass>com.CmsWebApplication</mainClass>
        <layout>ZIP</layout>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
            </goals>
        </execution>
    </executions>
</plugin>

    问题四:成功打包后,运行web下面的jar文件,发现springboot找不到resources下的templates中的html文件。解决办法:

@RequestMapping("/toMain")
public String toMain() {
//返回的一般是return "/" + "templates下的包名(user或者admin)" + "/" +"main"
//修改为
   return "templates下的包名(user或者admin)" + "/" +"main";//  即去掉最前面的 /
}

    问题五:上传项目到github中,idea的上传和myeclipse不一样,myeclipse需要在github中建立一个远程仓库,然后输入远程仓库地址并通过验证才能进行上传;idea只需要在settings-->Version Control --> Github中配置好账户,然后在菜单栏点击VCS-->Import into version control --> share project on github,填上远程仓库的name(不用先去创建,idea会自动创建),完成commit即可push。