Maven够用就好

本文详细介绍了Maven的使用流程,包括下载与配置Maven环境,主要命令及其作用,插件的使用与生命周期管理,以及如何通过dependencyManagement与dependencies管理依赖版本。此外,还提供了Maven插件的绑定与调用方式,以及常用jar构建过程的生命周期阶段。
学习maven,只要知道pom、dependency、coordination就可以了,剩下的就是学习一个一个的plugin的Goal

配置
maven
export MAVEN_HOME=/home/matthewi/software/maven-3.3.3
export PATH=$PATH:$MAVEN_HOME/bin

主要命令
mvn help:system       初始化仓库
mvn clean package   清空target,打包
mvn package            打包,依据项目生成 jar 、war等文件
mvn clean package -DskipTests   打包前跳过测试
mvn eclipse:eclipse     生成 Eclipse 项目文件
mvn compile :编译源代码
mvn test-compile :编译测试代码 
mvn test : 运行应用程序中的单元测试 
mvn clean :清除目标目录中的生成结果
mvn jetty:run       运行
mvn install:install-file -Dfile=/home/matthewi/share/CCP_REST_SMS_DEMO_JAVA_v2.6r/CCP_REST_SMS_DEMO_JAVA_v2.6r/sdk/lib/httpclient.jar -DgroupId=ytx -DartifactId=org.apache.http -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true         第三方库,在公共库里肯定没有,可以使用install添加到本地maven仓库里,然后正常引用就可以了

参数
-DskipTests        
跳过测试
-Dfindbugs.skip=true    跳过findbug
-Denforcer.skip=true


内置变量
${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型,缺省为jar
${project.xxx} 当前pom文件的任意节点的内容


dependencyManagement主要目的是管理多个子项目中对同一个依赖包的版本号保持一致,不会真实的引入
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让 所有在子项目中引用一个依赖而不用显式的列出版本号。Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用在这个dependencyManagement 元素中指定的版本号。

例如在父项目里:
<dependencyManagement>  
<dependencies>  
<dependency>  
<groupId>mysql</groupId>  
<artifactId>mysql-connector-java</artifactId>  
<version>5.1.2</version>  
</dependency>  
...  
<dependencies>  
</dependencyManagement>  
然后在子项目里就可以添加mysql-connector时可以不指定版本号,例如:
<dependencies>  
<dependency>  
<groupId>mysql</groupId>  
<artifactId>mysql-connector-java</artifactId>  
</dependency>  
</dependencies>  
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。

dependencies
相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。

pluginManagement和 dependencyManagement类似,也是为了统一管理版本。

生命周期
Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
1、clean生命周期:清理项目,包含三个phase阶段。
1)pre-clean:执行清理前需要完成的工作
2)clean:清理上一次构建生成的文件
3)post-clean:执行清理后需要完成的工作
2、default生命周期:构建项目,重要的phase阶段如下。
1)validate:验证工程是否正确,所有需要的资源是否可用。
2)compile:编译项目的源代码。  
3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
4)Package:把已编译的代码打包成可发布的格式,比如jar。
5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
6)verify:运行所有检查,验证包是否有效且达到质量标准。
7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
3、site生命周期:建立和发布项目站点,phase阶段如下
1)pre-site:生成项目站点之前需要完成的工作
2)site:生成项目站点文档
3)post-site:生成项目站点之后需要完成的工作
4)site-deploy:将项目站点发布到服务器

插件
两种方式 调用Maven插件目标。第一种方式是 将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户 在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

Maven为实现快速构建、有一套 内置的插件绑定。三套生命周期的插件绑定具体如下( 其实是各个生命周期阶段与插件的目标的绑定 )(这些插件不需要自己手动写到pom文件中 其中default生命周期的构建方式会其打包类型有关、打包类型在POM中<packaging>packageType</packaging>指定、一般有jar、war两种类型、下面是 常用的jar的构建过程

clean生命周期
pre-clean        
clean                      maven-clean-plugin:clean
post-clean
site生命周期
pre-site
site:                      maven-site-plugin:site
post-site
site-deploy:              maven-site-plugin:deploy
default生命周期
process-resources          maven-resources-plugin:resources
compile                    maven-compiler-plugin:compile
process-test-resources     maven-resources-plugin:testResources
test-compile:              maven-compiler-plugin:testCompile
test:                      maven-surefire-plugin:test
package                    maven-jar-plugin:jar
install:                   maven-install-plugin:install
deploy:                    maven-deploy-plugin:deploy


<think>嗯,用户这次明确提出了需要查找与Maven库相关的开源资源和镜像站点。结合对话历史来看,用户应该是个Java开发者,之前提到过IDEA版本与Maven兼容性问题,说明正在被开发环境配置困扰。从技术需求分析,用户的核心诉求可能包含三个层面:1)快速获取可靠的开源镜像资源2)解决实际开发中的依赖下载问题3)潜在的优化构建速度需求。注意到用户特意强调"开源"关键词,可能所在企业有合规要求。有趣的是用户引用的参考内容里藏着关键线索:那个apache官方archive链接其实正是Maven版本仓库,只是用户没意识到这是重要资源。另外阿里云镜像的配置样本也验证了国内开发者对加速的强烈需求。专业层面需要系统梳理资源类型:首先是仓库服务类型(公有/私有),然后是资源内容(软件包/元数据/版本),最后是访问方式(Web界面/配置文件)。国内主流镜像其实都符合开源要求,但像华为云镜像因为网络覆盖好特别值得推荐。安全方面要提醒nexus-repository这些私有部署方案——虽然用户没直接问,但考虑到企业开发场景很可能需要。文档资源推荐maven.apache.org官方就够用,毕竟开源项目最该参考first-party资料。最后准备用多级列表呈现资源,公有镜像按稳定性排序(把高校镜像列在商业云服务前更显中立),开源项目单独分类。不过要注意华为云排序,实测其响应速度比阿里云更快。</think> 以下是为您整理的Maven开源库相关镜像资源及开源项目信息,结合国内开发者常见需求优化了推荐顺序: ### 一、主流公有镜像仓库(国内加速) 1. **阿里云Maven镜像** ```xml <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> ``` - 覆盖中央仓库/Google/JCenter等主流库 - 支持仓库状态查询:[status.aliyun.com](https://status.aliyun.com) 2. **华为云镜像** ```xml <url>https://repo.huaweicloud.com/repository/maven/</url> ``` - 华北/华南多地CDN加速 3. **腾讯云镜像** ```url https://mirrors.cloud.tencent.com/nexus/repository/maven-public/ ``` 4. **高校镜像站**(教育网优先) - 清华TUNA:`https://mirrors.tuna.tsinghua.edu.cn/apache/` - 中科大:`https://mirrors.ustc.edu.cn/` ### 二、开源私有仓库项目(自建) | 项目名称 | 技术栈 | 关键特性 | |----------------|--------------|-----------------------------------| | **Nexus Repository** | Java | 支持代理/宿主/分组仓库,企业级权限管理 [^3] | | **JFrog Artifactory** | Java | 全语言支持,DevOps流水线集成 | | **Apache Archiva** | Java | 轻量化,基础仓库管理 | ### 三、关键文档资源 1. **官方仓库列表** [Maven Central Repository Search](https://search.maven.org/) 2. **版本兼容性指南** [Maven Releases History](https://maven.apache.org/docs/history.html) > ✅ 验证案例:IDEA 2020.3.x 需使用 ≤ Maven 3.8.4 避免兼容问题[^1] ### 四、依赖检索技巧 ```bash # 命令行搜索示例 mvn dependency:search -Dartifact=groupId:artifactId ``` ```xml <!-- 精确依赖声明示例 --> <dependency> <groupId>androidx.appcompat</groupId> <artifactId>appcompat</artifactId> <version>1.6.1</version> <!-- 推荐锁定稳定版 --> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值