当前位置: 首页 > news >正文

qq刷赞网站推广全网十大免费跨境软件

qq刷赞网站推广全网,十大免费跨境软件,做特产网站,营销方案100个软文一、什么是maven的聚合和继承why 随着技术飞速发展#xff0c;各类用户对软件的要求越来越高#xff0c;软件也变得越来越复杂。 软件设计人员往往会采用各种方式对软件划分模块#xff0c;已得到更加清晰的设计及更高的复用性。 当把Maven应用到实际项目中的时候why 随着技术飞速发展各类用户对软件的要求越来越高软件也变得越来越复杂。 软件设计人员往往会采用各种方式对软件划分模块已得到更加清晰的设计及更高的复用性。 当把Maven应用到实际项目中的时候也需要将项目分成不同的模块。 Maven的聚合特性能够把项目的各个模块聚合在一起构建而maven的继承特性则能帮助抽取各个模块相同的依赖和插件等配置。 二、聚合 例如现在有一个商城服务下面有两个模块item-service和cart-service。如果我们想要一次构建两个项目模块而不是到两个模块的目录下分别执行mvn命令。 为了能够一次构建item-service和cart-service两个模块我们需要格外的名为hmall的模块然后通过该模块构建整个项目的所有模块。 hmall作为一个maven项目它也必须有它自己的POM。 下面是hmall的pom.xml内容 上面的POM依旧使用了商品服务共同的groupId com.heima,artifactId为独立的hamll版本也与其他两个模块一致。 但是这里的packaging值为POM。而item-service和cart-service的packaging为jar。对于聚合模块来说其打包方式packaging的值为POM否则就无法构建。 而modules这是实现聚合的最核心的配置。用户可以通过在一个打包方式为pom的Maven项目中声明任意数量的module元素来实现模块的聚合。 这里每一个module的值都是一个当前POM的相对目录。例如hmall的POM的路径为D:\WorkSpace\hmall\pom.xml那么item-service就对应了目录D:\WorkSpace\hmall\item-service。这两个目录各自包含了pom.xml、src/main/java/、src/test/java等内容。离开hmall也能够独立构建。 为了方便用户构建项目、通常将聚合模块放在项目目录的最顶层其他模块作为聚合模块的子目录存在这样当用户得到源码的时候第一眼发现的就是聚合模块的POM不用从多个模块中去寻找聚合模块来构建整个项目。 hmall cart-service pom.xml item-service pom.xml pom.xml 当然也可以是平行的目录结构 hmall pom.xml cart-service pom.xml item-service pom.xml 如果使用平行目录聚合模块的POM也需要做相应的修改 modules module../item-service/module /modules从聚合模块运行mvn clean install命令得到的输出 maven首先解析聚合模块的POM分析要构建的模块、并计算出一个反应堆构建顺序探后根据这个顺序依次构建各个模块。 三、继承 面向对象设计中可以建立一种类的父子结构然后父类中声明一些字段和方法供子类继承。这样可以做到“一处声明多处使用”。 类似的在maven世界中也有类似的机制能让我们抽取出重复的配置。做到“一处声明多处使用”这就是POM的继承。 我们创建POM的父子结构然后在父POM中声明一些配置供子POM继承。 如果A工程继承B工程则代表A工程默认依赖B工程依赖的所有资源且可以应用B工程中定义的所有资源信息。 被继承的工程B工程只能是POM工程。 注意在父项目中放在中的内容时不被子项目继承不可以直接使用 放在中的内容主要目的是进行版本管理。里面的内容在子项目中依赖时坐标只需要填写 和即可。注意如果子项目不希望使用父项目的版本可以明确配置version。 继续以商城服务为基础。pom.xml文件如下 需要注意的一点它的packaging为pom这一点与聚合模块一样作为父模块的POM其打包类型也必须为pom由于父模块只是为了帮助消除配置的重复因此它本身不包含POM之外的项目文件也不需要src/maini/java之类的文件夹。 有了父模块来看看继承父模块的子模块。将item-service的POM修改如下 上述POM中使用parent元素声明父模块快parent下的元素groupId、artifactId和version指定了父模块的坐标元素relativePath表示父模块POM的相对路径该例中的hmall/pom.xml表示父POM的位置在与item-serice/pom.xml上一层的目录下。 当项目构建时maven会首先更具relativePath检查父POM如果找不到再从本地仓库中查找。relativePath的默认值为../pom.xml也就是说maven默认父POM在上一层目录下。 1.可继承的POM元素 groupId项目组ID version项目版本 description项目的描述信息 organization项目的组织信息 inceptionYear项目的创始年份 url项目的URL地址 developers项目的开发者信息 contribution项目的贡献者信息 distributionManagement项目的部署配置 issueManagement项目的缺陷跟踪系统信息 ciManagement项目的持续继承系统信息 scm项目的版本控制系统信息 mailingLists项目的邮件列表信息 properties自定义的Maven属性 dependencies项目的依赖配置 dependencyManagement项目的依赖管理配置 repositories项目的仓库配置 build包括项目的硬盘吗目录配置、输出目录配置、插件配置、插件管理配置等。 reporting包括项目的报告输出目录配置、报告插件配置等。 2.依赖管理 可继承元素列表包含了dependencies元素说明依赖是会被继承的。在子模块item-service和cart-service同时依赖了lombokspring-boot-starter-test等等因此可以将这些依赖配置放到父模块hmall中两个子模块就能够移除这些依赖简化配置。 maven提供的dependencyManagement元素既能让子模块继承到父模块的依赖配置又能保证子模块依赖使用的灵活性。在dependencyManagement元素下的依赖声明不会引入实际的依赖不过它能够约束dependencies下的依赖使用。例如可以在hmall加入这样的dependencyManagement配置如 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.heima/groupIdartifactIdhmall/artifactIdpackagingpom/packagingversion1.0.0/versionmodulesmodulehm-common/modulemoduleitem-service/modulemodulecart-service/module/modulesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.12/versionrelativePath//parentpropertiesmaven.compiler.source11/maven.compiler.sourcemaven.compiler.target11/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingorg.projectlombok.version1.18.20/org.projectlombok.versionspring-cloud.version2021.0.3/spring-cloud.version/properties!-- 对依赖包进行管理 --dependencyManagementdependencies!--spring cloud--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!--单元测试--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies/dependencyManagementdependencies!-- lombok 管理 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${org.projectlombok.version}/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/plugin/plugins/build /project首先父POM将lombok依赖的版本以Maven变量的形式提取了出来不仅消除了一些重复也使得各依赖的版本处于更加明显的位置。 这是使用的dependencyManagement声明的依赖既不会给item-service引入依赖也不会给它的子模块引入一依赖。不过这段配置是会被继承的。 现在修改item-service的POM如 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.heima/groupIdartifactIdhmall/artifactIdversion1.0.0/version/parentartifactIditem-service/artifactIddependencies!--common--dependencygroupIdcom.heima/groupIdartifactIdhm-common/artifactIdversion1.0.0/version/dependency!--web--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--单元测试--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency/dependenciesbuildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project上述的POM中的依赖配置较原来简单了一些所有的springframework依赖只配置了groupId和artifactId省去了version而Junit依赖不仅省去了version还省去了依赖范围scope。这些信息可以省略是因为item-service继承了hamll中的dependencyManagement配置。完整的依赖声明已经包含在父POM中子模块只需要配置简单的groupId和artifactId就能获得对应的依赖信息从而引入正确的依赖。 使用这种依赖管理机制似乎不能减少太多的POM配置但强烈推荐采用这种方法。 主要原因是在于父POM中声明之后子模块在使用依赖的使用就无须声明版本也就不会发生多个子模块使用依赖版本不一致的情况。这可以降低依赖冲突的几率。 如果子模块不生命依赖的使用即使依赖已经在父POM的dependencyManagement中声明了也不会产生任何实际的效果。 补充依赖范围为import的依赖范围该依赖范围只在dependencyManagement元素下才有效果使用该范围的依赖通常指向一个POM作用是将目标POM的dependencyManagement配置导入并合并到当前POM的dependencyManagement元素中。例如想要在另一个模块中使用与上面dependencyManagement的一样的配置除了赋值配置或者继承这两种方式之外还可以使用import范围依赖将这一配置导入。如 dependencyManagementdependenciesdependencygroupIdcom.heima/groupIdartifactIdhmall/artifactIdversion1.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement3.插件管理 maven也提供了pluginManagement元素帮助管理插件。该元素中配置的依赖不会造成实际的插件调用行为当POM中配置了真正的plugin元素并且其groupId和artifactId与pluginManagement中配置的插件匹配时pluginManagement的配置才会影响实际的插件行为。 例如 配置了maven-source-plugin将其jar-no-fork目标绑定到了verity生命周期阶段以生成项目源码包。如果一个项目中有很多子模块并且需要得到所有这些模块的源码包那么更好的方法是父POM中使用pluginManagement配置插件。 如 buildpluginManagementpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-source-plugin/artifactIdversion2.2.1/versionexecutionsexecutionidattach-sources/idphaseverify/phasegoalsgoaljar-no-fork/goal/goals/execution/executions/plugin/plugins/pluginManagement/build当子模块需要生成源码包的时候只需要如下配置 buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactId/plugin/plugins/build子模块声明使用了maven-source-plugin插件同时又继承了父模块的pluginManagement配置。如果子模块不需要使用父模块中pluginManagement,可以尽管将其忽略如果子模块需要不同的插件配置则可以执行配置以覆盖父模块的pluginManagement配置。 四、聚合与继承的关系 多模块maven项目中聚合与继承其实是两个概念其目的完全不同。前者主要是为了方便快速构建项目后者主要是为了消除重复配置。 对于聚合模块来说它知道有哪些被聚合的模块但那些被聚合的模块不知道这个聚合模块的存在。 对于继承关系的父POM来说他不知道有哪些子模块继承于它但那些子模块都必须知道自己的父POM是什么。 共同点 聚合POM与继承关系的父POM的packaging都必须是pom同时聚合模块与继承关系的父模块除了POM之外都没有实际内容。 在现有的实际项目中往往一个POM即是聚合POM又是父POM。 五、约定优于配置 标准的重要性已经不用过于强调想象一下如果不是所有程序员都是基于HTTP协议开发Web应用互联网会乱成什么样。各个版本的IEFireFox等浏览器之间的差异已经让很多开发者头疼不已。 java成功的重要原因之一就是它能够屏蔽大部分操作系统的差异XML流行的原因之一是所有语言都接受它。而maven提倡的“约定优于配置”这是maven最为核心的设计理念之一。 那为什么要使用约定而不是自己更灵活的配置呢原因之一是使用约定可以大量减少配置。 六、反应堆 在一个多模块的Maven项目中反应堆Reactor是指所有模块组成的一个构件结构。对于单模块的项目反应堆就是该模块本身。对于多模块项目来说反应堆包含了模块之间的依赖和继承关系从而能够自动计算出合理的模块构件顺序。 1.反应堆的构件顺序 如hmall的聚合配置如下 构建完成之后会有这样的输出 可以看出反应堆的构建顺序依次为hmall、hm-common、item-service、cart-service。 实际的构建顺序是 maven按顺序读取POM如果该POM没有依赖模块那么就构建该模块否则就先构建其依赖模块如果该依赖模块还依赖于其他模块则进一步限购键依赖的依赖。 模块间的依赖关系会将反应堆构成一个有向非循环图各个模块是该图的节点依赖关系构成有向边。这个图不允许出现循环因此当出现模块A依赖与B而B依赖于A的情况时maven会报错。 七、裁剪反应堆 有时会需要仅仅构建完整反应堆中的某些个模块maven提供很多的命令行选项支持裁剪反应堆输出mvn-h可以看到这些选项。
http://www.zqtcl.cn/news/429571/

相关文章:

  • 自己做网站的软件下载wordpress发布文章 更新失败
  • 电大企业网站建设论文范文搜狗推广登录入口
  • 建设银行u盾用网站打不开软件工程师证书有哪些
  • 网站建设域名的购买多少钱注册的公司才能参加投标
  • 做婚纱网站策划方案php网站超市源码
  • 济南网站搭建公司有哪些做企业网站的
  • 360做企业网站多少钱凡客诚品网
  • 效果好的徐州网站建设LAMP环境wordpress放在哪里
  • 考试类网站如何做什么是网络营销?有何特点
  • 网站制作公司哪家好wordpress插件怎么汉化
  • 南阳东莞网站建设公司网页升级访问狼在线观看
  • 备案的网站每年都要备案么东平县建设局网站
  • 做网站必须得ipc手机网站制作方法
  • 山东省建设监理协会网站打不开移动互联网开发实践
  • 南宁微网站制作需要多少钱小米商城网站开发文档
  • 制作销售网站有哪些如何制作个人网页设计
  • 新网站做内链智能网站推广软件
  • 西宁市住房和城乡建设局网站广州站是指哪个站
  • 帮建网站网页设计师考试内容
  • seo网站开发txt 发布 wordpress
  • 资讯门户类网站模板定制系统开发公司
  • 让网站快速收录初中毕业如何提升学历
  • 石家庄做网站价格seo优化效果
  • 为什么浏览器打开是2345网址导航seo免费资源大全
  • 网站工程是干啥的动态个人网页制作html教程
  • 阿里云多网站建设wordpress 统计分析
  • 长沙网站定制公司科技特长生
  • 查公司的口碑和评价的网站中学生怎么做网站
  • 做网站买空间多少钱深圳seo优化公司
  • 中国建设银行北京市互联网网站wordpress商城购物表单