MAVEN的使用 2020-02-11 程序之旅 暂无评论 995 次阅读 ## MAVEN的使用 [TOC] 简单数maven就是用于管理和构造项目用的一个工具。使用maven搭建的项目有自己的规范,其中maven的目录结构为: src |-main |--java |--resources pom.xml 现在用的编辑器idea能够自动生成maven项目,我们也能自行生成maven项目,命令行如下: ```shell mvn archetype:generate -DgroupId=louie -DartifactId=simple -DarchetypeArtifactId=maven-archetyp-quickstart -Dversion=1.0 ``` 其中的参数,是maven中的jar的坐标,唯一标识maven库中的项目 - groupId:企业的唯一标识域名,内部项目名 - artifactId:项目内模块的唯一标识:模块名 - version:模块的不同版本 > 一般项目不会生成resource目录,需要自行添加resource文件夹 > > 另外,web项目的生成: > > ```shell > mvn archetype:generate -DgroupId=louie -DartifactId=simple-web -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0 > ``` #### POM.xml结构 - modules: 子项目 - dependencies: jar管理 - build: 打包,插件 - properties: 全局变量 - distributionManagement: 远程仓库 - dependencyManagement: 默认依赖信息 - scm: 连接代码库 - profiles: 环境激活文件 > scope用来控制依赖对编译,测试,运行的classpath的关系 > > ``` > 1.compile: 默认编译依赖范围。被依赖项目在编译,测试,运行都参与。打包的时候需包含进去 > 2.test:被依赖项目仅仅参与测试相关的工作,如测试代码的编译、执行 > 3.provided:被依赖项目对运行期无效,打包的时候不用包进去。如servlet-api > 4.runtime:被依赖项目无需参与项目的编译。例如:jdbc驱动 > ``` ### maven的生命周期 #### 抽象的三大生命周期 ![maven-life.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/02/11/331462909455709/maven-life.png) > 三个生命周期完全独立完成,执行过程交给plugin插件完成。 ### maven插件 自定义插件,使用idea添加 `maven-plugin`插件模块,修改模块pom.xml打包方式,引入依赖包: ```xml // pom.xml maven-plugin org.apache.maven maven-plugin-api 3.3.9 org.apache.maven.plugin-tools maven-plugin-annotations 3.5.2 ``` 添加类`MyMavenPlugin`,自定义插件内容 ```java package info.felton; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; /** * * @author liurui * @Description: * @date 2020/2/11 */ @Mojo(name = "log") public class MyMavenPlugin extends AbstractMojo { @Parameter(property = "log.name", defaultValue = "felton") private Object name; public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("hello "+ name + ", deploy to your local repository"); } } ``` 完成后安装到maven版本库中,执行`mvn install`命令,使用execution能够绑定多个插件,goal标签指向@mojo中的name。 ```xml info.felton maven-plugin 1.0 clean log ``` 执行命令 ```shell mvn info.felton:maven-plugin:1.0:log -Dlog.name=liurui ``` 执行结果 ![image-20200211104013599.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/02/11/331442560631966/image-20200211104013599.png) ### FAQ #### maven的jar冲突 1. 路径最短原则:相同jar包,哪个引用路径短使用哪个 2. 同路径下,谁先声明谁优先:同级路径应用,先声明的jar包,先使用 3. 使用exclusions排除:可以使用exclusion来排除不使用的jar包 #### 父子项目的关系 父子项目之间属于依赖关系,之间可以通过`dependencyManagement`标签来管理jar包依赖关系。 打赏: 微信, 支付宝 标签: java, maven, spring 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。