使用Maven+SpringBoot创建一个多模块项目
新闻内容
我会提供一个选项,但由于机器翻译的限制,可能不会非常准确:
如果在 Maven 项目中,后来需要将 Spring Boot 项目转变为多模块项目,可采取以下方法。此处多模块化的目的是为了让各个项目能够使用后面提到的 Common 项目的 Java 实现和资源。
鉴于找不到相关案例,希望这个方法能对某人有所帮助。
约束
需要一个父项目,但是父项目不能在当前项目的上级路径中找到(不改变项目根目录)。
最初期的组合
Maven = 麦文
服务1,服务2
这是一个Spring Boot应用程序。每个都成为单独的Web应用程序。
常见的
这是一个Spring Boot应用程序。只有在测试时才能独立启动。基本上,它是Service1和Service2的共同实现。它有一个application-common.yml文件,包含Service1和Service2共用的属性。
这个配置在Eclipse上可以共享资源文件,但是通过Maven进行打包时无法获取资源文件。
总结起来就是这种感觉。
构建图像
整理要点
-
- Parentプロジェクトを上位フォルダに用意したくない
- Service1 + Common, Service2 + Commonのマルチモジュールを目指す
結論的構成方式
以Service1为例,展示构成。
在这个构成中,所有以下都可行同时满足要求。
-
- mvn package
-
- mvn spring-boot:run
- 個別のプロジェクトのSpring Boot Applicationの実行
这个配置始终需要-Dspring.profiles.active=common选项。
应该在Service项目的子目录中创建并控制基于环境的application-*.yml文件(local,develop,staging,production)。
在这种情况下,通过指定-Dspring.profiles.active=common,local等来启动。
对于jar文件,使用java -Dspring.profiles.active=common,local -jar Service1-0.0.1-SNAPSHOT.jar的形式。
文件夹结构
Service1 ・・・この単位でソース管理
└ ParentPom
└ pom.xml
└ pom.xml
Common ・・・この単位でソース管理
└ pom.xml
Service1和Common需要存在于同一个目录中。
Service1和Common分别作为Maven项目进行管理和源代码控制,因此很容易满足这个前提(或者说应该是处于这种情况)。
形成一种形象
在Service1项目中创建一个Parent项目。通过这样做,可以确保源代码管理、实施Java项目和打包的单位都符合需求。
-
- Mavenマルチモジュールプロジェクトとしての依存関係は、
Common –> Service1 –> Service1Parent
Common –> Service1Parent
实际处理方式
我去了Service1进行了处理。
创建ParentPom目录。
需要为多模块创建一个ParentPom,但需要在Service1项目内创建它。
Service1
└ ParentPom
└ pom.xml
父範本的pom.xml
<?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.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
<!-- ../で上位ディレクトリを遡るのがミソ -->
<module>../../Common</module>
<module>../../Service1</module>
</modules>
<groupId>com.example</groupId>
<artifactId>Service1Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Service1</name>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
</dependencies>
</project>
服务1的pom.xml文件
<?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>Service1Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/>
</parent>
<!-- package成果物 -->
<packaging>jar</packaging>
<artifactId>Service1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Service1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
<spring.base.profile>common</spring.base.profile>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Mavenマルチモジュールの構成で必要 -->
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>Common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Spring-Boot用 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<mainClass>com.example.SampleApplication</mainClass>
<layout>JAR</layout>
<jvmArguments>-Dspring.profiles.active=${spring.base.profile}</jvmArguments>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!-- Compile -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-Xlint:all,-options,-path</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- Test -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dspring.profiles.active=${spring.base.profile}</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>
常见的pom.xml
<?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>Service1Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!-- package成果物 -->
<packaging>jar</packaging>
<artifactId>Common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
</dependencies>
</project>