Apache Maven 高级应用(Part B)

简介: Apache Maven 高级应用(Part B)

一、Maven的拆分与聚合思想

假设在电商中买家和卖家端分别为两套系统,两套系统中都需要查看商品信息,这种情况下如果将DAO层代码分别放到两个系统中虽然能够使用,但是后期维护成本非常大。

Maven在针对代码重用是如何解决的?

Maven把一个完成的项目分成不同的独立模块,这些模块有自己独立的坐标,哪个地方需要就可以直接引用坐标即可,也就是说我们可以把项目中的dao层、service层、utils层等分成不同的独立模块,如果有其他系统需要时直接引用坐标,避免重复代码。通过也可以通过坐标把零散的模块聚合成一个项目,这就是maven的拆分聚合思想

将项目改成Maven拆分与聚合的形式

创建父工程

使用IDEA创建一个Maven工程lilith-parent作为父工程,父工程中没有任何代码,只保留pom文件即可,但是需要将Part A部分中项目的pom依赖导入刚刚创建的父工程中。

创建子模块

选中lilith-parent父工程,分别lilith-mapper、lilith-service、lilith-web三个工程,其中lilith-mapper和lilith-service是普通的Maven工程,而lilith-web需要根据模板创建一个web工程。

827f22edbfa0405b98080c4cffbb758f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

创建完成之后,从父工程的pom文件中可以看出多处一个modules标签,标签中正是创建的是三个子模块。

分别在lilith-service中引入lilith-mapper,在lilith-web中引入lilith-service,引入JAR包跟引入代码本质上没有区别

工程与模块的区别:

  • 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整就可以认为是一个完成的项目,与项目是工程还是模块没有关系
  • 工程只能使用自己内部的资源,工程天生是独立的,后天可以和其他工程或模块建立关联关系。模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用
  • 子模块天生集成父工程,是可以使用父工程的所有资源,子模块之间天生是没有任何关系的,需要手动建立依赖关系

父子工程中填充代码

分别将mapper层和service层以及controller层对应的代码拷贝进入,注意配置文件的拷贝

lilith-mapper模块中的application.xml文件重命名为application-mapper.xml,并将事务控制相关配置复制到lilith-service中application-service.xml中

在lilith-web模块中的resources目录下新建application.xml配置文件,使用import标签导入mapper和service的配置文件

<import resource="classpath:application-mapper.xml" />
<import resource="classpath:application-service.xml" />
复制代码

启动应用的方式

父工程启动

5905f9a631a448aea87fb467e50fcfed_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

通过父工程的tomcat插件启动服务,浏览器中查询item

lilith-web模块启动

通过lilith-web模块的tomcat插件直接启动应用会失败,因为本地仓库没有lilith-service的JAR包,直接在父工程下面点击install,会将lilith-mapper和lilith-service以及lilith-web三个工程的JAR包安装到本地仓库中

25275e1f92f7402c8cc462b3757f3d3e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

再次通过lilith-web模块的tomcat插件启动应用,浏览器中查询商品信息

ca76161490fc45b482352e84513a7b82_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

启动成功,并可以成功查询到商品信息

配置本地Tomcat启动

点击Edit Configurations,配置本地的Tomcat

2fc11f63032543d9bb4d4a16004cc7ee_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

使用本地的tomcat启动应用,同样也可查询到指定的商品信息

二、Deploy到Nexus私服或远程仓库

当Maven根据坐标寻找JAR包时,它首先会查看本地仓库,如果本地仓库存在此JAR包,则直接使用;如果本地仓库不存在,Maven会去远程仓库查找,发现需要的JAR包之后,下载到本地仓库再使用。

而Nexus就是一种远程仓库,为什么要设置远程仓库或者私服?

  • 一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。
  • 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。

Docker快速搭建Nexus私服

拉取镜像

docker pull sonatype/nexus3 
复制代码

创建数据挂载目录并授权

mkdir /opt/nexus-data
chmod 777 /opt/nexus-data
复制代码

启动容器

docker run -d --name nexus3 -p 9020:8081 -p 9021:9021 -v /opt/nexus-data:/nexus-data sonatype/nexus3
复制代码

登录地址:http://IP:9020/

初始用户:admin 密码:nexus-data文件夹下的admin.password

Deploys到私服时,需要在pom文件底部增加配置

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://ip:9020/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://ip:9020/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>
复制代码

执行Maven的deploy命令即可将应用deploy到私服中


相关文章
|
19天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
64 5
|
2月前
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
74 2
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
240 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
1月前
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
57 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
|
3月前
|
Java Maven Spring
SpringBoot 系列之 Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resource
这篇文章描述了在使用Maven构建Spring Boot项目时遇到的`maven-resources-plugin`插件版本问题导致的编译失败,并提供了通过修改插件版本至3.1.0来解决这个问题的方法。
SpringBoot 系列之 Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resource
|
2月前
|
Apache
多应用模式下,忽略项目的入口文件,重写Apache规则
本文介绍了在多应用模式下,如何通过编辑Apache的.htaccess文件来重写URL规则,从而实现忽略项目入口文件index.php进行访问的方法。
|
3月前
|
分布式计算 大数据 数据处理
Apache Spark的应用与优势:解锁大数据处理的无限潜能
【8月更文挑战第23天】Apache Spark以其卓越的性能、易用性、通用性、弹性与可扩展性以及丰富的生态系统,在大数据处理领域展现出了强大的竞争力和广泛的应用前景。随着大数据技术的不断发展和普及,Spark必将成为企业实现数字化转型和业务创新的重要工具。未来,我们有理由相信,Spark将继续引领大数据处理技术的发展潮流,为企业创造更大的价值。
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
52 1
|
3月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
63 0
|
3月前
|
Java
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决