搭建Maven父子项目结构
目录儿
- 1 创建父项目
- 2 创建子项目
- 3 额外补充
- 3.1 dependencyManagement标签
- 3.2 scope标签
- 3.3 spring-boot-maven-plugin打包插件
- 3.3.1 repackage配置项的作用
- 不加`repackage`配置项打包
- 加上`repackage`配置项
1 创建父项目
用 Maven 的原型模板创建一个项目作为父项目
然后就进入工程了,接着要修改文件字符编码为UTF-8
设置注解生效
选择编译器版本
编辑一下需要忽略的文件(根据文件后缀区分),后面上传git
的时候忽略这些后缀结尾的文件
到这里基本设置完成,接下来看pom.xml
打开pom.xml
,把以下几个标签去掉,我们不需要
<!-- 删掉name标签 --><name>...</name><!-- 删掉url标签 --><url>...</url><!-- 删掉inceptionYear标签 --><inceptionYear>...</inceptionYear><!-- 删掉distributionManagement标签 --><distributionManagement>...</distributionManagement><!-- 删掉reporting标签 --><reporting>...</reporting><!-- 删掉build标签下面的pluginManagement标签,保留plugin标签 --><build><pluginManagement>...</pluginManagement></build>
添加一个<dependencyManagement></dependencyManagement>
标签
完了以后就是这个样子,空空荡荡干干净净白白嫩嫩
<?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"><!-- 模块版本信息,由 Maven 版本决定不用动它 --><modelVersion>4.0.0</modelVersion><!-- 父项目基本信息 --><groupId>org.example</groupId><artifactId>echoo-sample</artifactId><version>1.0.0</version><!-- 属性,一般用来定义依赖的版本 --><properties></properties><!-- 依赖统一管理 --><dependencyManagement></dependencyManagement><!-- 构建 --><build><!-- 插件 --><plugins></plugins></build></project>
接下来就是导入需要用的基本依赖(按自己的需求导入)
<?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"><!-- 模块版本信息,由 Maven 版本决定不用动它 --><modelVersion>4.0.0</modelVersion><!-- 父项目基本信息 --><groupId>org.example</groupId><artifactId>echoo-sample</artifactId><version>1.0.0</version><!-- 属性,一般用来定义依赖的版本 --><properties><spring.boot.version>2.3.2.RELEASE</spring.boot.version><spring.cloud.version>Hoxton.SR9</spring.cloud.version><spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version></properties><!-- 依赖统一管理 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-dependencies --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba-dependencies --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-boot-starter-web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><!-- spring-boot测试 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring.boot.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement><!-- 构建 --><build><!-- 插件 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><!-- maven中跳过单元测试 --><configuration><skip>true</skip></configuration></plugin></plugins></build></project>
删除父项目中的src
目录
2 创建子项目
可以创建一个,也可以直接导入
我是直接复制了一个模块到父项目的根路径
目录结构如下:
修改provider8031
子项目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.example</groupId><artifactId>echoo-sample</artifactId><version>1.0.0</version></parent><groupId>com.echoo.cloud.nacos.provicer</groupId><artifactId>provider8031</artifactId><version>1.0.0</version><name>provider8031</name><description>nacos-provider8031</description><packaging>jar</packaging><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><!-- 热部署,单独作用于模块,所以不用声明在父pom --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!-- 服务健康监控 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Nacos 服务注册/服务发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><!-- 项目构建配置 --><build><!-- 生成的 jar 包名称 --><finalName>provider-one</finalName><plugins><!-- 因为是 SpringBoot 项目,所有 spring-boot-maven-plugin 插件打包 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- 打包配置 --><executions><execution><goals><!-- 重新打包,把所有依赖都打进 jar 包中,这样打出来的包就可以直接独立运行,因为里面包含了所有依赖 --><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
主要>注意两个点
1.< parent >
标签填的信息就是父项目的基本信息
2.记得添加spring-boot-maven-plugin 打包插件
的repackage
配置
特别注意:打包插件配置在有启动类的模块就行,父项目和一些基础项目没有启动类的模块不用配置打包插件,否则在父项目执行
install
时会报错:Unable to find main class
(Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.4:repackage (default) >on project starter: Execution default of goal org.springframework.boot:spring-boot-maven->plugin:2.7.4:repackage failed: Unable to find main class)
3 额外补充
3.1 dependencyManagement标签
dependencyManagement
:在父模块中创建一个统一的依赖管理
子模块中可以选择性继承父类
dependencyManagement
中的依赖,因为此标签中的依赖子pom不会自动继承,而需要额外声明。但是,当依赖版本在父POM
中声明后,子模块在使用依赖的时候就无须声明版本,这样做的好处就是确保版本一致,方便版本统一管理。
3.2 scope标签
compile
:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。test
:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
。runtime
:该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile
相比,跳过了编译而已。例如JDBC驱动
,适用运行和测试阶段。provided
:该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile
,但是打包阶段做了exclude
(排除)操作。system
:从参与度来说,和provided
相同,不过被依赖项不会从maven
仓库下载,而是从本地文件系统拿。需要添加systemPath
的属性来定义路径import
:这个比较特别,不是常规意义上的scope
,它只在dependencyManagement
元素下才有效果,作用是将需要导入的目标POM
中的dependencyManagement
里面的所有dependency
依赖导入并合并到当前POM
的dependencyManagement
中。
3.3 spring-boot-maven-plugin打包插件
3.3.1 repackage配置项的作用
不加repackage
配置项打包
把repackage
配置项注释掉
<!--<goal>repackage</goal>-->
打包安装
先看打出来的jar
包的大小,只有5KB
再用WinRAR
解压软件打开,文件非常少,基本就是这个模块本身的编译文件(.class)
打开provider-one.jar\META-INF\MANIFEST.MF
,只有一些基本的构建信息,没有MainClass,StartClass
信息。
尝试运行这个jar
包,妥妥报错,因为它没有指定入口程序,依赖也不全。
这样打出来的jar
包不能用
加上repackage
配置项
<!-- 项目构建配置 --><build><!-- 生成的 jar 包名称 --><finalName>provider-one</finalName><plugins><!-- 因为是 SpringBoot 项目,所有 spring-boot-maven-plugin 插件打包 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- 打包配置 --><executions><execution><goals><!-- 重新打包,把所有依赖都打进 jar 包中,这样打出来的包就可以直接独立运行,因为里面包含了所有依赖 --><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
这样子打包会生成俩文件,一个是.jar
包,一个是jar.original
文件
jar.original
文件会发现和之前不配置repackage
打出来的.jar
包大小一样,暂时不知道这个文件怎么打开。
再看jar
包,大小比不配置repackage
打出来的.jar
包大了很多。直接打开它看看
目录结构变了,多了个BOOT-INF,在provider-one.jar\BOOT-INF\lib
里面有这个模块需要用到的各种jar
包。
这里可以证明repackage
配置项会把模块所依赖的jar
打进包里,让这个jar
包可以独立运行。
马上试一下运行这个jar
包,果然没毛病
搭建Maven父子项目结构相关推荐
- 深入理解微服务Maven父子项目构造以及项目打包部署
一.问题背景 随着微服务项目的越来越流行,更多的公司开始使用微服务来搭建自己的业务系统.微服务很好地解耦了业务,每一个服务只提供特定的功能,真正的做到了各司其职,互不干扰,同时微服务间可以互相通信,可 ...
- IDEA 创建SpringBoot多级Maven父子项目
IDEA 创建SpringBoot多级MAVEN父子项目 一.环境准备 1.JDK安装配置 2.MAVEN安装配置 二.项目搭建 1.创建顶级Maven项目 附: 一级项目完整`pom.xml`配置 ...
- Eclipse创建Maven父子项目
1.项目需求 今天就介绍在Eclipse中创建Maven父子项目,举一个例子,需要建立如下关系的Maven项目. 2.构建一个父级maven项目 新建一个Maven项目,如下图所示: 选择默认工作空间 ...
- idea搭建 maven web项目
idea搭建 maven web项目 1.Create new Project 2.选择Maven,勾选Create from archetype 在archetype中选择:org.apache.m ...
- 黑猴子的家:Maven 父子项目
1.创建maven项目,删除src文件 2.编辑pom.xml文件,配置<packaging>pom</packaging> 3.第二层maven父子项目和第一次maven父子 ...
- 2-1. Maven 三层项目结构搭建
前言 通过上文:1-3. 开发环境安装(全),我们完成了开发环境的安装! 本文开始第二章:二.项目结构搭建 正所谓:万丈高楼平地起,打好地基是关键! 主要内容:创建Maven项目.三层架构说明.搭建三 ...
- 使用idea搭建maven+ssm项目
先新建一个maven的项目 1.file->new->project->next 2.maven->勾选creat from archetype->webapp,同时选择 ...
- 创建Maven父子项目及发布到tomat的完整过程
最近在搞一个项目,要自己创建一个maven的子项目,总结一下以后自己看: 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步 ...
- 基于IDEA搭建JavaWeb入门项目结构(2021版)
前言:对于很多从eclipse等IDE迁移到IDEA开发工具的小伙伴,对于如何在IDEA上创建JavaWeb入门项目结构不太了解.或者即使创建成功也能勉强使用也不知其所以然.针对于此,写该篇博客予以总 ...
最新文章
- java排序——桶排序
- centos 系统初始配置优化
- 解码大脑:在脑机接口上寻求稳定性
- Oracle PCTfree assm,Oracle 段空间管理方式与PCTFREE和PCTUSED的概念
- 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例
- hive(4)——元数据概述
- 招聘│微软云计算英雄帖来了,快接招!
- 第四章 治病法要(1)
- css超出隐藏显示省略号
- Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析
- 第十次课:Python函数(一)
- 微课有关计算机应用基础,【计算机仿真论文】微课在计算机应用基础课的应用(共3802字)...
- 三人表决器实验报告总结_三人表决器实验报告
- fxp连接失败_用FLASHFXP连接站点,总显示连接失败(连接丢失),该怎么办呢
- 阿里P9又有新瓜,而我却是技术圈的一股清流
- Docker基本命令
- java递归函数返回值_java基础5(方法、有无返回值、重载、递归)
- win32 字体 api学习总结
- mysql 1045 centos_解决centos下MySQL登录1045问题
- 用matlab画同心圆,求同心圆的同心度
热门文章
- 尼罗红——一种比较实用的脂质荧光染料
- MPLS BGP 跨域(OptionA/B/C(一/二))
- 解决ohmyzsh下载时连接超时
- JsTree 最详细教程及完整实例
- html5 jstree树形菜单,树形插件jsTree
- STM32Cube的USB_device软件库说明
- 红队是做什么?该学什么才能成为呢?
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
- 2003年度十个空气污染最严重的城市
- java中的导入gnu,【JAVA学习笔记】静态导入