springboot项目父子多模块打包

文章目录

    • 1.springboot项目父子多模块打jar包
      • 1.项目工程架构
      • 2.各个模块pom文件配置
    • 2.springboot项目父子多模块打war包

1.springboot项目父子多模块打jar包

1.项目工程架构

springboot项目父子多模块打包_第1张图片
Student:父工程Maven
main:子模块,也是启动类MainApplication所在的模块,main依赖其他模块
commoncorestudent等:子模块。除main模块之外,依赖部分或不依赖的其他模块
注意事项:父工程创建为Maven,启动类所在模块创建时一定要用SpringBoot项目,其他子模块创建时Maven、SpringBoot都可以。

2.各个模块pom文件配置

父工程Student


<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.examplegroupId>
    <artifactId>StudentartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    <name>Studentname>
 
    <modules>
        <module>mainmodule>
        <module>studentmodule>
        <module>structmodule>
        <module>coremodule>
        <module>commonmodule>
    modules>
 
project>

注:在父工程的pom文件中一定不能有spring-boot-maven-plugin插件,否者这个插件就将传递到每一个子模块中,打包会出错;

main启动类模块


<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.0modelVersion>
    
    <parent>
        <groupId>com.examplegroupId>
        <artifactId>StudentartifactId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <groupId>com.examplegroupId>
    <artifactId>mainartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>mainname>
    <description>Demo project for Spring Bootdescription>
    <properties>
        <java.version>1.8java.version>
    properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
 
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
 
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
 
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
        dependency>
 

        
        <dependency>
            <groupId>com.examplegroupId>
            <artifactId>coreartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
 
        <dependency>
            <groupId>com.examplegroupId>
            <artifactId>commonartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
 
        <dependency>
            <groupId>com.examplegroupId>
            <artifactId>studentartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
 
    dependencies>
 
    <build>
        <finalName>mainfinalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
 
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    
                    <mainClass>com.example.main.MainApplicationmainClass>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
project>

注:在该子模块的pom文件中必须引入spring-boot-maven-plugin打包插件,并且要配置将所依赖的jar包全都打到这一包中,如果在其他模块中引入了spring-boot-maven-plugin将会每个模块都单独打成一个包,无法拉取到启动类所在包中;

core子模块pom文件,其他子模块类似


<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <parent>
        <artifactId>StudentartifactId>
        <groupId>com.examplegroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
 
    <artifactId>coreartifactId>
 
    <dependencies>
            
    dependencies>

project>

3.执行生成jar包和部署过程
通过maven菜单,在父工程下package(或mvn package命令)
springboot项目父子多模块打包_第2张图片
这里需要注意的是虽然我们是将所有的jar都搭到main这个jar中,但是我们执行clean和package却是要对父工程进行;
springboot项目父子多模块打包_第3张图片
部署:将打好的jar包上传到服务器的任意路径上,执行 java -jar main.jar(前提需要安装jdk并配置环境变量,并且版本和项目构建的版本一致)

注意:在linux环境下(通过xshell连接)运行"java -jar xxx.jar",项目成功运行后关闭窗口或者ctrl+z,会直接关闭掉项目,所以需要通过nohup和&命令配合:“nohup java -jar xxx.jar &”,在目录下会生成nohup.out日志文件查看:"tail -f nohup.out"就可以查看项目日志了。

2.springboot项目父子多模块打war包

修改main启动类模块pom


<packaging>warpackaging>
 
<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-webartifactId>
    
   <exclusions>
      <exclusion>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-tomcatartifactId>
      exclusion>
    /exclusions>
dependency>         
 
 
 <plugin>
     <artifactId>maven-war-pluginartifactId>
     <version>3.2.3version>
     <configuration>
           
           <attachClasses>trueattachClasses>
     configuration>
 plugin>

修改springboot启动类,启动类继承SpringBootServletInitializer,重写configure方法,让Servlet容器启动时启动Spring Boot

@SpringBootApplication
@ComponentScan("com.example.**")
@MapperScan("com.example.**.mapper")
public class MainApplication extends SpringBootServletInitializer {
 
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
 
    /**
     *  继承SpringBootServletInitializer ,覆盖configure(),把启动类Application注册进去。
     *  外部web应用服务器构建Web Application Context的时候,会把启动类添加进去
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MainApplication.class);
    }
}

其他说明,当前环境及工具版本:
springboot版本2.4.5
jdk版本1.8.0
tomcat版本apache-tomcat-8.5.45

你可能感兴趣的:(java,java,jar)