父项目的pom:
<packaging>pom</packaging>
<modules>
<module>ihpl-evaluation-user-api</module>
<module>ihpl-evaluation-user-impl</module>
<module>ihpl-evaluation-psev-api</module>
<module>ihpl-evaluation-psev-impl</module>
<module>ihpl-evaluation-wechat-api</module>
<module>ihpl-evaluation-wechat-impl</module>
<module>ihpl-evaluation-webapp</module>
<module>ihpl-evaluation-manager</module>
<module>ihpl-evaluation-job</module>
</modules>
<properties>
<revision>1.0.0-SNAPSHOT</revision>
<framework.version>1.0.0-SNAPSHOT</framework.version>
<mysql-connector-java.version>5.1.47</mysql-connector-java.version>
<flatten-maven-plugin.version>1.1.0</flatten-maven-plugin.version>
</properties>
<dependencyManagement>
依赖框架,不依赖子项目
<dependency>
<groupId>com.clearofchina.ihpl</groupId>
<artifactId>ihpl-framework</artifactId>
<version>${framework.version}</version>
**<type>pom</type>
<scope>import</scope>**
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencyManagement>
子项目的pom:
<parent>
<groupId>com.clearofchina.ihpl</groupId>
<artifactId>ihpl-evaluation</artifactId>
<version>${revision}</version>
</parent>
依赖同等级的子项目,不依赖父项目,不依赖框架
<dependency>
<groupId>com.clearofchina.ihpl</groupId>
<artifactId>ihpl-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
框架的父pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<modules>
<module>ihpl-core</module>
<module>ihpl-user-api</module>
<module>ihpl-security</module>
<module>ihpl-security-sample</module>
<module>ihpl-base-service</module>
<module>ihpl-base-web</module>
<module>ihpl-websocket</module>
</modules>
<properties>
<revision>1.0.0-SNAPSHOT</revision>
<commons-io.version>2.6</commons-io.version>
<commons-beanutils.version>1.9.3</commons-beanutils.version>
<commons-net.version>3.6</commons-net.version>
<guava.version>23.6.1-jre</guava.version>
<swagger.version>2.8.0</swagger.version>
<dozer.version>5.5.1</dozer.version>
<dubbo.version>2.7.3</dubbo.version>
<dubbo-spring-boot-starter.version>2.7.1</dubbo-spring-boot-starter.version>
<mybatis-spring.version>2.0.1</mybatis-spring.version>
<mybatis-plus.version>3.1.2</mybatis-plus.version>
<mysql-connector-java.version>5.1.47</mysql-connector-java.version>
<gson.version>2.8.5</gson.version>
<dom4j.version>1.6.1</dom4j.version>
<thumbnailator.version>0.4.8</thumbnailator.version>
<zxing.version>3.3.3</zxing.version>
<poi.version>3.11</poi.version>
<flatten-maven-plugin.version>1.1.0</flatten-maven-plugin.version>
</properties>
<repositories>
<repository>
<id>yiban</id>
<url>http://nexus.clear-rdc.com/content/repositories/yiban/</url>
</repository>
<repository>
<id>snapshots</id>
<url>http://nexus.clear-rdc.com/content/repositories/snapshots/</url>
</repository>
<repository>
<id>releases</id>
<url>http://nexus.clear-rdc.com/content/repositories/releases/</url>
</repository>
<repository>
<id>getui-nexus</id>
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
</repository>
</repositories>
pom文件中维护了各模块之间的依赖和继承关系;
Maven项目的常用的打包类型分为:pom、jar、war等类型;
项目模块化可以将通用的部分抽离出来,方便重用;修改一部分代码不再是build整个项目,缩短了build时间;.
dependencies、dependencyManagement区别:
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
一些坑:
1.关于部署,打包
Common(框架)打包出来的应该是不可执行的jar包,所以不要在Common的pom中定义spring-boot-maven-plugin插件,因为这个SpringBoot插件会在Maven的package后进行二次打包,目的为了生成可执行jar包
这里还有一个小坑,如果还是不能进行打包的话,那么就install一下root(父)项目,也就是总目录下的pom文件对应的install操作,这样再打包(子)front项目基本上就没有问题了,老铁,都是经验呀,希望对你们有帮助