用持续集成的观点来看Maven

今天读了《系列文章整理 - “听”乔梁讲述持续集成的故事》,其中一些观点非常赞同,其中提到一个Java领域中一个很有名气的项目管理工具:Maven,特别想对此多说几句,于是形成此文~~

先说个题外话,老的Java程序员一看到Maven就想起Ant,而实际本站的代码构建也是用的Ant,不过Maven和Ant的关注点真的不是很一样,Ant帮你执行很多脚本目标,仅此而已,是个很好的工具,可以用它做很多你想做的事情,但是Maven远不止此,Maven更像是一个项目管理工具,它传达出了一些很好的思路和最佳实践~~

 

OK,现在开始侃一侃~~

 

1、测试代码与功能代码同源

用Maven创建的项目普遍都有两个源码目录,一个叫src,另一个叫test,src下是存放的业务逻辑相关的代码,test下是存放的测试用例。有些人可能并没有意识到这点有啥了不起的,他们可能使用自己的平台来管理测试用例代码脚本云云。不过在敏捷实战中,测试用例,特别是单测,是为所有人服务的,包括开发人员,在TDD实战中甚至主张测试先行。当然,如果你还在使用传统的瀑布开发方法,可能这么做的意义的确不大。对于测试代码和功能代码分开管理的弊端,比如测试代码更新不及时,为了让保证上线时间,直接注释掉一些过时的测试用例,开发人员不方便在开发过程中写单测,以至于直接放弃单测等等。所以,感觉Maven的这种做法,很值得推荐

 

1.1、延伸一下,其他脚本也要放到源码库中

比如服务的启停脚本,部署脚本,都应该有版本控制,保证可追溯,便于审计,同时功能代码变了,部署方式和服务启停脚本也很可能同步修改,放到svn、git中吧,乔帮主都说了:Everything is code,还犹豫个啥捏?呵呵

 

2、配置文件要单独抽取出来

一般来讲Maven会在src和test目录下创建一个resources目录来管理一些配置文件,具体什么配置呢?比如数据库连接配置,缓存配置,程序的业务逻辑配置,功能开关,log配置等等。还有程序在运行过程中需要的比较大的数据,如果不方便打包进来的话也可以转化为配置,只是在配置文件中描述一下这些大数据的下载地址即可。另外,对于服务的关联关系,比如所依赖的上游服务的IP地址之类的,不建议放到配置里,这应该是Naming Service应该解决的问题,不过关联关系的name本身倒是可以放在配置中。对于Maven本身而言,它会把配置和代码的编译产物打到一个包里,这点值得商榷,在某些场景下,配置单独出来会更方便。举个例子:代码关着开关上线,此时服务不需要停摆,然后再单独发起一次开开关的动作,因为只是对配置本身做了修改,此时对于部署脚本应该可以判断二进制bin文件没有修改不用重新下载并更新,只是下载conf更新一下即可,如果发现开开关的这个版本有问题,可以很快再上一个关开关的版本用于回滚,但是对于conf和bin打包在一起的情况,部署脚本就很难做出这样的判断,每次都下载bin文件比较不值得

 

3、对于不同的环境,单独准备conf文件

因为有了第二步的做法,即把配置文件单独抽取出来了,这样还有另外一个好处,比如:现在有多套环境的情况,开发人员有个CI单测环境,测试人员有个自动化集成测试环境,再来个沙盒环境,验收测试环境,线上环境,这样会有多套环境,而各个环境可能配置文件不同,这个问题也是我现在工作中遇到的一个很麻烦的问题,Maven的解决方案是:对不同的环境准备不同的conf,然后再打包的时候根据传入的环境ID来获取相应的配置文件,这样做,实际是为每个环境单独编译打包了一份,我只能说是一种方案,好不好,还是比较难以评论,因为我现在也没想明白,呵呵,有相关经验的朋友期望能赐教一二。

 

4、模块的依赖管理

依赖可以分为三种,编译时依赖,测试时依赖,运行时依赖,Maven的scope就是描述这几种类别的
不过这不是关键,依赖管理里很关键的做法是通过描述一个lib库的identity来让Maven找到这个jar,这个identity包含了一个可寻址的名称和version,这样一来maven在编译打包的时候就可以找到这个jar并下载到本地,并且在最终打包的时候一起打到发布包里,这么做很赞,好在哪里?从部署的角度来考虑,这个包对外的依赖很少,要想服务run起来只要在本地准备一个JDK(如果是WEB服务还需要有个WEB容器)就可以,换句话说叫容易部署,呵呵,当然,如果把JDK和WEB容器一起打包进去就更好了,不管是服务扩容还是搭建环境都很容易。从这个角度来看C模块的动态链接库就会比较麻烦,因为依赖问题是部署不友好的,于是~~~Google的C模块统统用的静态链接库,于是~~~Canonical要开发自己的包管理工具,O(∩_∩)O~

 

今天先扯到这吧,北京这天气。。。从冬天一下子到了夏天,好热。。。

Maven Maven仓库分为: 1.本地仓库:为当前本机电脑上的所有Maven工程服务 2.远程仓库: (1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。Maven约定的目录结构约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式: ①通过配置的形式明确告诉它 ②基于第三方工具或框架的约定。Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。 阅读详情

相关推荐

取代Maven?maven-mvnd持续霸榜 GitHub Trending,性能提升300%

在 GitHub 上闲逛的时候,发现了一个新的项目:maven-mvnd,持续霸占 GitHub trending 榜单好几天了。 maven-mvnd,可以读作 Maven Daemon,译作 Maven 守护版,旨在为 Maven 提供更快的构建速度,灵感借鉴了 Gradle 和 Takari(Maven 生命周期优化器)。 https://github.com/apache/maven-mvnd Maven 和 Gradle 可以说是项目构建工具中的绝代双骄,我自己的观点是:Maven 不比 G

沉默王二 2394

构建基于maven的综合项目(二)--验证表单、实体关系

一、添加表单验证 1、页面,导入form标签,form上添加modelAttribute属性,信息提示用form:errors标签,对应model属性或boolean方法 [code="java"] …… …… …… …… …… [/code] 2、和页面对应的model类 [code="java"] packa...

hawkzod的博客 280

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

Gradle – Maven的观点

正如我博客的读者所知道的, 我有点像Maven迷 。 我从2007年8月左右开始使用Maven,从没有回过头。 但是,就像其他所有情况一样,“变化是唯一不变的”。 现在这个领域还有其他参与者,Gradle看起来是最有前途的。 我决定试一试,并在本文中分享了我的发现/学习的要点(当然,一篇文章只能勉强刮伤表面,但这仍然是一个开始)。 如果您从事基于Java的项目,并使用Maven,则可能会发现...

最佳 Java 编程 182

VMware Workstation Pro 17 最新破解版安装教程(附永久激活密钥)

本文详细介绍了VMware Workstation Pro 17专业版的安装与配置指南,包括系统要求检查、官方版本安装流程、高级配置优化及常见问题排查。通过合规使用官方版本,开发者可以充分利用其强大的虚拟化能力,提升多平台开发与测试效率。

weixin_29327977的博客 3559

LilyGO T-Watch学习(一)环境搭建,编译下载

1、安装arduino IDE, 安装后按照说明添加lib IDE上选择“项目->加载库->添加.ZIP库”,选择C:\Users\用户名\Documents\Arduino\libraries\下的TTGO_TWatch_Library-master.zip; 查看是否添加成功: 项目->加载库,滑到最后可看见已添加的TTGO... 参考:https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library 2、安装esp32 ardui

hxl5955的博客 2906

gradle maven_Gradle – Maven的观点

gradle maven 正如我博客的读者所知道的, 我有点像Maven迷 。 我从2007年8月左右开始使用Maven,从没有回过头。 但是,与其他所有情况一样,“变化是唯一的常数”。 现在这个领域还有其他参与者,Gradle似乎是最有前途的。 我决定试一试,并在本文中分享了我的发现/学习的要点(当然,一篇文章仅勉强刮伤表面,但这仍然是一个开始)。 如果您从事基于Java的项目,并使用Mav...

最佳 Java 编程 166

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

JAVA一条龙持续集成方案(完整步骤+脚本+配置)

自建自动化持续集成方案 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录自建自动化持续集成方案前言一、组成部分二、流程步骤1. 流程图2. 搭建步骤1. 搭建Gitlab2. 搭建Maven仓库总结 前言 提微服务开发过程中,开发人员需要不断编码、编译、打包、上传、构建镜像、发布镜像、发布服务、自动化测试等一系列步骤,如何才能有效的减少各环节之间时间,减少开发者的工作量,形成一套自动化的体系? 以下内容的前提是基

xielei19870217的专栏 882

用户画像标签维度_搭建电商平台用户画像标签体系

01 整体思路电商平台连接了卖家和买家两端,最终目的都是促进交易,从而追求更高的销售额。提高人货匹配度是促进交易的关键,而提高人货匹配度的关键就是“让买家找到想要的货物”。本文结合“人、货、场”理论模型,尝试建立电商平台的用户画像标签体系。02 三类标签用户在平台购物的整体流程可以概括为:进入平台、选择商品、下单付款。可以将该过程抽象为“人、货、场”。即用户通过什么途径进入什么商品的页面...

weixin_31668621的博客 1642

企业级 Multi-Agent 实施指南:从需求拆解到上线验收的全流程方法论

本文基于12个不同行业(金融、制造、零售、互联网)的百万级Multi-Agent投产项目经验,提炼出一套可复用的全流程实施SOP,覆盖需求对齐与拆解、架构设计、开发实现、测试优化、上线部署、验收迭代6个核心阶段,包含标准化工具、量化指标、踩坑指南、可直接运行的代码示例,帮你避开90%的落地坑。需求阶段是项目成败的核心,必须对齐业务方的量化指标,明确系统边界架构设计要兼顾性能、安全、可扩展性,不要为了炫技选择复杂的框架工程化是投产的关键,测试、灰度、监控、降级机制缺一不可。

AI云原生与云计算技术学院 224

8、硬件工程师笔试面试知识器件篇——二极管(2025版本)

当二极管正向偏置时(阳极相对于阴极为正电压),PN结内部的电场减小,允许电子和空穴复合,形成电流。而当二极管反向偏置时,PN结的电场增强,阻止电流通过。在接触区域,P型半导体中的空穴和N型半导体中的自由电子会相互扩散和复合,形成一个没有自由载流子的耗尽区。在设计电子电路时,平衡二极管的正向电压降(Vf)和最大电流(I)是一个重要的考虑因素,因为这两者直接影响电路的性能和效率。通过这些步骤,可以确保在设计电子电路时选择的二极管能够安全地处理预期的最大正向电流和最大反向电压,从而提高电路的可靠性和安全性。

XU157303764的博客 3501

maven 父maven_Maven神话解释

maven 父maven Maven标准化适用于所有项目构建,这意味着一旦开发人员熟悉了一个Maven项目,他们便可以全面了解Maven构建。 这通常被 Maven粉丝称为Maven的“绝佳”功能之一。 确实,Hirn在点此致意的同时开始了他最新的博客文章 ,然后继续讨论并驳回了选择不使用Maven的常见原因清单。 首先,Maven以Apache风格对所有项目进行建模,即使它们不是Web服务...

174

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最全 Maven 教程(2025 版)配置终极指南!

摘要:Maven作为Java项目构建神器,通过自动化依赖管理和标准化构建流程显著提升开发效率。本文系统讲解Maven十大核心配置:从环境安装、settings.xml全局配置到本地仓库优化、镜像加速和私服搭建;详解Profiles多环境切换、IDE集成及常用命令;重点解析SpringBoot项目中的Maven配置技巧。通过实战案例展示如何将构建时间从分钟级降至秒级,帮助开发者从"手动依赖"转向"智能管理",构建完整的Maven知识体系。掌握这些配置不仅解决构建难题,更

朱雀随云记的博客 858

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Mac和Windows下maven配置报错51

1.安装完找不到javahome 终端命令:/usr/libexec/java_home  输出java安装路径 2.配置环境变量 vi .bash_profile进入编辑 #java JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home export JAVA_HOME 保存退出

baidu_31071595的博客 1995

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Maven复习,初步了解Maven的简单应用

Maven好处、作用Maven核心概念(尽量掌握)maven下载、安装、配置、验证maven解压及环境变量配置Maven工程约定目录结构编译所有java文件命令:mvn compileMaven修改仓库地址、下载地址Maven中的坐标

忆往昔的博客 1019

Maven命令 install 和 package的区别

Maven命令 install 和 package的区别 Maven是目前十分流行的项目构建工具以及依赖解决工具,其提供的常用指令中有两个很容易引起使用者的疑惑, 那就是 install 和 package , 那么这两个命令到底有啥区别呢? Maven install 安装指令,其做了两件事情: 1. 将项目打包(jar/war),将打包结果放到项目下的 target 目录下 2. 同时将上述打包结果放到本地仓库的相应目录中,供其他项目或模块引用 Maven install 安装指令执行步骤:(idea)

qq_43842093的博客 2万+

maven手动下载

如果有需要maven手动下载的话, 比如我是要下载这个依赖,或者说应该是插件 <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> 有一种方式是:在对应的目录下打开命令行 然后输入命令 install:install-file.

blackcatsmile的博客 2429

Maven3实战笔记16Maven总结

1.  前言 用了15篇Blog做Maven3的学习笔记,最后想想好像觉得总是比较冷冰冰的,将知识点列出来,停留在如何使用Maven的层面。那么咱们抛开书本,回过头来再看看哪些Maven的功能点,再来总结总结Maven到底为我们做了些什么,使用Maven的好处到底体现在哪里。 2.  Maven改变个人习惯 在没有Maven之前,我们开发一个新项目的时候,总是要引入很多第三方的组件为我们提供...

suhuanzheng7784877的专栏 170

maven 父maven_Maven不会吮吸。 。 。 但是Maven文件会

maven 父maven 我不会参加整个Maven辩论,但可以说我是所有最佳实践的坚定支持者,对我而言,Maven是最佳实践的体现。 我的意思是说,Maven是围绕特定的最佳实践构建方法构建的。 注意,我说了一种特定的最佳实践构建方法。 在现实世界中,有不止几种构建方法可以胜任最佳实践,但是Maven假设其中只有一个。 这并不意味着其他人都不好,而只是意味着如果您使用Maven,则需要接受其假...

最佳 Java 编程 96

maven 命令参考_Maven完整参考

maven 命令参考 这篇评论是关于Sonatype的Maven: Tim O'Brien,John Casey,Brian Fox,Jason Van Zyl,Eric Redmond和Larry Shatzer 的完整参考 。 免责声明:3年前,我从Sonatype的网站上了解了Maven。 我发现这是学习Maven的好工具。 现在,我对该工具有了更多的经验,我尝试以客观的方式撰写此评论...

dlz00001的博客 128

Maven——Maven核心概念——史上最烂系列

Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用。Maven 是一款在大型项目开发过程中不可或缺的重要工具。(自己粗略写了一个SSM项目之后,回顾头来看这个,会发现更有感觉) 文章目录1:Maven核心概念介绍1.1 约定的目录结构1.2 POM1.3 坐标1.4 仓库1.5 依赖1.5.1 依赖的目的是什么 ?1.5.2 依赖的范围1.5.3 依赖的传递性...

qq_44891295的博客 919

使用 Eclipse svn 插件 上传MAVEN聚合工程到SVN

最近项目需要将新的代码上传到 svn 这里指 svn 服务器上无当前项目 和提交是两个概念 在网上搜了几篇各有优点吧 这里有一个注意事项 有争议 大家可以探讨下 观点一: 上传MAVEN聚合工程一个最需要注意的地方: 在创建MAVEN聚合工程的时候,创建一个module工程,在父工程会出现对应一样的module工程。 所以这里提交SVN的顺序有些讲究:先共享父工程到SVN,并提交版本控...

Architect_优快云的博客 485

maven中dependencies爆红

maven中dependencies爆红怎么办? 这次在这儿碰到了这个问题这么我了好久,写一个我自己的解决问题,可以试一下,不可以了再找找其他的方法 一、这个应该是maven的问题,架包没有导入进去 1.1、从git上拉取文件以后发现dependencies爆红,先把拉取的项目中的target删除了,里边有一些idea的缓存,不放心的话可以build一下 1.2、打开File -> projectStructure 1.3、如果你用的jdk1.8的话可以改成这个,然后apply 1.4、然后点击打

一只Java小白 2万+
上一篇: C语言的#include指令不是非得引入.h头文件
下一篇: 部署问题域分析-自动化部署到底要解决什么问题
UlricQin
博客等级 码龄17年 21粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值