一、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