文章目录
一、Maven配置
使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。
(1)groupId:公司或组织的域名倒序+当前项目名称
(2)artifactId:当前项目的模块名称
(3)version:当前模块的版本
阿里云镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
Maven编译版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
二、Idea配置Maven
Maven打包插件
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
三、依赖管理
1、直接依赖/间接依赖:
如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
2、依赖范围
1)compile(默认就是这个范围)
(1)main目录下的Java代码可以访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖
(3)部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。
2)test
(1)main目录下的Java代码不能访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖
(3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:对junit的依赖。仅仅是测试程序部分需要。
3)provided
(1)main目录下的Java代码可以访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖
(3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要。
4)其他:runtime、import、system等。
3、依赖的传递性
间接依赖时,只有依赖范围为compile
时可以访问。
Maven工程 | 依赖范围 | 对A的可见性 | ||
---|---|---|---|---|
A | B | C | compile | √ |
D | test | × | ||
E | provided | × |
4、依赖的原则:解决jar包冲突
路径最短者优先、先声明者优先。
这里“声明”的先后顺序指的是dependency标签配置的先后顺序。
5、统一版本管理
<!--统一管理当前模块的jar包的版本-->
<properties>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
四、生命周期
1、简介
Maven有三套相互独立的生命周期,分别是:
- Clean Lifecycle在进行真正的构建之前进行一些清理工作。
- Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。
- Site Lifecycle生成项目报告,站点,发布站点。
它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行mvn clean install site
运行所有这三套生命周期。
2、Clean 生命周期
Clean生命周期一共包含了三个阶段:
-
pre-clean 执行一些需要在clean之前完成的工作
-
clean 移除所有上一次构建生成的文件
-
post-clean 执行一些需要在clean之后立刻完成的工作
3、Site 生命周期
Site生命周期
- pre-site执行一些需要在生成站点文档之前完成的工作
- site生成项目的站点文档
- post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy将生成的站点文档部署到特定的服务器上
这里经常用到的是site
阶段和site-deploy
阶段,用以生成和发布Maven
站点,这可是Maven相当强大的功能,文档及统计数据自动生成。
4、Default 生命周期
运行任何一个阶段的时候,它前面的所有阶段都会被运行
Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。
-
validate
-
generate-sources
-
process-sources
-
generate-resources
-
process-resources 复制并处理资源文件,至目标目录,准备打包。
-
compile
编译项目的源代码。 -
process-classes
-
generate-test-sources
-
process-test-sources
-
generate-test-resources
-
process-test-resources 复制并处理资源文件,至目标测试目录。
-
test-compile
编译测试源代码。 -
process-test-classes
-
test
使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 -
prepare-package
-
package
接受编译好的代码,打包成可发布的格式,如JAR。 -
pre-integration-test
-
integration-test
-
post-integration-test
-
verify
-
install
将包安装至本地仓库,以让其它项目依赖。 -
deploy将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
五、继承
父工程配置:
- 打包方式为
pom
- 只需要保留pom.xml文件
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
子工程配置:
<!--继承-->
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
六、参考资料
https://download.csdn.net/download/weixin_44624117/87406399