springboot项目父子多模块打包
1.springboot项目父子多模块打jar包1.项目工程架构Student:父工程Mavenmain:子模块,也是启动类MainApplication所在的模块,main依赖其他模块common、core、student等:子模块。除main模块之外,依赖部分或不依赖的其他模块注意事项:父工程创建为Maven,启动类所在模块创建时一定要用SpringBoot项目,其他子模块创建时Maven、S
1.springboot项目父子多模块打jar包
1.项目工程架构
Student:父工程Maven
main:子模块,也是启动类MainApplication所在的模块,main依赖其他模块
common、core、student等:子模块。除main模块之外,依赖部分或不依赖的其他模块
注意事项:父工程创建为Maven,启动类所在模块创建时一定要用SpringBoot项目,其他子模块创建时Maven、SpringBoot都可以。
2.各个模块pom文件配置
父工程Student
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Student</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Student</name>
<modules>
<module>main</module>
<module>student</module>
<module>struct</module>
<module>core</module>
<module>common</module>
</modules>
</project>
注:在父工程的pom文件中一定不能有spring-boot-maven-plugin插件,否者这个插件就将传递到每一个子模块中,打包会出错;
main启动类模块
<?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修改为父工程信息 -->
<parent>
<groupId>com.example</groupId>
<artifactId>Student</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>main</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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- ************************************************************************ -->
<!-- 子模块依赖 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>student</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>main</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.example.main.MainApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
注:在该子模块的pom文件中必须引入spring-boot-maven-plugin打包插件,并且要配置将所依赖的jar包全都打到这一包中,如果在其他模块中引入了spring-boot-maven-plugin将会每个模块都单独打成一个包,无法拉取到启动类所在包中;
core子模块pom文件,其他子模块类似
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- parent为父工程信息 -->
<parent>
<artifactId>Student</artifactId>
<groupId>com.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>core</artifactId>
<dependencies>
<!-- dependency依赖区 -->
</dependencies>
</project>
3.执行生成jar包和部署过程
通过maven菜单,在父工程下package(或mvn package命令)
这里需要注意的是虽然我们是将所有的jar都搭到main这个jar中,但是我们执行clean和package却是要对父工程进行;
部署:将打好的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
<!-- 打包方式为war包 -->
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
/exclusions>
</dependency>
<!-- war包插件 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<!-- 把class打包jar作为附件 -->
<attachClasses>true</attachClasses>
</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
更多推荐
所有评论(0)