以下转载自廖雪峰的官方网站:Maven基础。
1、介绍
修改完pom.xml后需要右键选择Maven-Reload project。
在IDEA中使用Maven添加netty包可以参考:Java网络编程(2):TCP和UDP中相关内容。
2、依赖管理
如果不希望把源码和jar包放到公网上,那么可以搭建私有仓库,搭建方法可以参考 “7、发布Artifact” 。私有仓库总是在公司内部使用,只需要在~/.m2/settings.xml中配置好内部地址,使用方式和中央仓库没有任何区别。
阿里云Maven镜像有好几个仓库地址,参见仓库服务 ,如果指定的依赖没有下载成功的话可以先在仓库查找后修改为所在的镜像地址,如下所示,也可以添加多个<mirror>。
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun_maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
3、构建流程
Maven可以实现编译,打包,发布等,在实际开发过程中,经常使用的Maven命令有clean(清理)、compile(编译)、test(运行测试)、package(打包),如下所示:
mvn clean:清理所有生成的class和jar;
mvn clean compile:先清理,再执行到compile;
mvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile;
mvn clean package:先清理,再执行到package。
打包的名称可以修改pom.xml文件,如:
<build>
<finalName>convert-def</finalName>
</build>
关于Maven构建的更多信息可以参考:廖旭锋的官方网站。
4、模块管理
Maven可以有效地管理多个模块,我们需要把每个模块当作一个独立的Maven项目,即每个模块有各自的pom.xml。比如项目中使用a、b、c三个模块的话,除了在根目录下的项目pom.xml,每个模块都应有一个pom.xml,如下为项目的组织结构,以及项目的pom.xml和模块A的pom.xml的配置示例,在根目录执行mvn clean package时,Maven会根据根目录的pom.xml找到3个module,然后一次性全部编译:
multiple - project
├── pom.xml
├── module - a
│ ├── pom.xml
│ └── src
├── module - b
│ ├── pom.xml
│ └── src
└── module - c
├── pom.xml
└── src
项目的pom.xml:
模块A的pom.xml,可以看到模块A依赖3个jar包,slf4j、logback 和 junit :
模块B的pom.xml:
如果模块A依赖模块B,则模块A需要模块B的jar包才能正常编译,我们需要在模块A中引入模块B:
可以看到,项目的pom.xml中的<packaging>为pom,而各个模块的pom.xml中的<packaging>为jar。同时可以看出来,模块A和模块B的pom.xml高度相似,因此,我们可以提取出共同部分作为parent:
这样模块A的pom.xml就可以从parent的pom.xml派生出来,从而简化代码,而且parent的<packaging>也是pom而不是jar,因为parent不含任何Java代码,parent也称为整个工程结构的一部分:
multiple - project
├── pom.xml
├── parent
│ └── pom.xml
├── module - a
│ ├── pom.xml
│ └── src
├── module - b
│ ├── pom.xml
│ └── src
└── module - c
├── pom.xml
└── src
5、 使用插件
Maven的compile、package等实际上是通过指定的插件来执行的,比如执行mvn compile的时候Maven负责找到compiler插件来执行编译,package使用的插件名称是jar。除了使用标准插件外,还可以使用自定义的插件,下面列举了一些常用的插件:
- maven-shade-plugin:打包所有依赖包并生成可执行jar;
- cobertura-maven-plugin:生成单元测试覆盖率报告;
- findbugs-maven-plugin:对Java源码进行静态分析以找出潜在问题。
使用自定义插件的时候,需要在pom.xml中进行声明,比如我们想要使用maven-shade-plugin插件来创建一个可执行的jar的话,需要修改pom.xml,具体方法可以参见廖雪峰的官方网站。
6、使用mvnw
mvn使用的是安装的Maven,可以使用mvnw来运行指定版本的Maven,使用mvnw命令需要安装Maven Wrapper,在安装Maven Wrapper的时候指定mvnw使用的Maven的版本。安装完Maven Wrapper后项目会生成mvnw相关的目录,可以将这些目录提交到SVN中,然后其它人更新后就可以通过mvnw来使用统一的Maven版本。mvnw的更多信息可以参考廖雪峰的官方网站。
7、发布Artifact
我们可以将自己开发的开源库发布到Maven中央仓库里,也可以将其发布到公司的私有仓库中,或者发布到GitHub Packages, 具体参见廖雪峰的官方网站。我们自己的Jar包的依赖信息也在pom.xml中配置,如下所示: