构建相关命令
需要在pom.xml所在目录执行
mvn clean
清理mvn compile
编译主程序mvn test-compile
编译测试程序mvn test
执行测试mvn package
打包mvn install
项目安装到仓库mvn site
生成站点mvn deploy
自动发布(需要单独的配置)
坐标(定位项目)
- groupid: 一般是公司域名倒叙+项目名称
- artifactid: 模块名
- version: 版本
仓库
- 本地仓库:当前电脑上仓库目录,为本地所有maven工程服务
- 远程仓库
- 私服(Nexus): 搭建在局域网中,为局域网所有maven工程服务。可以将中央仓库中的项目下载下来并保存下来
- 中央仓库:为所有maven工程服务
仓库中的内容
- maven自身需要的插件
- 第三方框架或工具的jar包
- 自己开发的maven工程
生命周期
- 特点:每个生命周期都是从最开始开始执行,执行到相应命令结尾处
- default lifeCircle(大致流程顺序)
- 处理资源文件
- compile
- test
- package
- install
- deploy
- clean lifeCircle
- pre-clean: 执行在清理前完成的工作
- clean: 移除上一次构建生成的文件
- post-clean: 执行一些需要在clean之后立刻完成的工作
- site lifeCircle:
- pre-site: 执行在生成站点文档之前的工作
- clean: 生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,为部署做准备
- site-deploy: 将生成的站点文档部署到特定的服务器上
设置默认jdk版本
进入maven/conf/目录,修改settings.xml文件的<profile>标签
<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>
依赖
-
对自己的maven工程执行
mvn install
,将项目放入本地仓库中依赖范围(
scope
)- compile(默认)
- 对主程序是否有效: YES
- 对测试程序是否有效: YES
- 是否参与打包: YES
- 部署时是否有效: YES
- test: 对测试程序有效
- 对主程序是否有效: NO
- 对测试程序是否有效: YES
- 是否参与打包: NO
- 部署时是否有效: YES
- 例子:junit
- provided(web工程使用的多):
- 对主程序是否有效: YES
- 对测试程序是否有效: YES
- 开发时是否有效: YES
- 部署时是否有效: NO
- 运行时是否有效: NO
- 例子:servlet-api.jar、jsp-api.jar
tips:如果在jsp翻译过来的java代码中报空指针异常,可能是jsp-api.jar的依赖范围问题。由compile修改为provided即可。
依赖的传递性
- 只有compile范围的依赖可以传递
- jar包版本冲突时,maven默认使用依赖路径最短的版本
- 依赖路径相同时,maven采用先申明优先原则。(dependency书写的顺序)
依赖的排除
tips: 对当前项目和依赖此项目的项目生效
-
<exclusions> <exclusion> <groupId><groupId> <artifactId></artifactId> </exclusion> </exclusions>
- compile(默认)
继承
父工程中统一指定依赖的版本,子工程中不指定此依赖的版本,就会自动使用父工程的版本。
tips: 配置继承关系后,执行安装命令时要先安装父工程
- 操作步骤:
- 创建一个maven工程。
打包方式为pom => <packaging>pom<packaging>
- 子工程中声明对父工程的引用(<project节点下>)
-
<!--子工程中声明父工程--> <parent> <groupId></groupId> <artifactId><artifactId> <version></version> <!--以当前pom.xml为基准的父工程pom.xml文件的相对路径(可选)--> <relativePath></relativePath> </parent>
-
- 将子工程中坐标与父工程坐标重复的内容删除(<project节点下>)
-
<groupId></groupId> <version></version>
-
- 在父工程中统一依赖管理(<project节点下>)
-
<dependencyManagement> <dependencies> .... </dependencies> </dependencyManagement>
-
- 在子工程中删除统一管理依赖的版本号(非必须,尽量统一)
- 创建一个maven工程。
聚合
- 作用: 一键安装模块工程
- 配置聚合
- 一般是配置在父工程中,也可以单独新建一个maven工程来配置
-
<modules> <module>以当前pom.xml为基准的其他项目的相对路径</module> <module>../MyMavenProject</module> </modules>
- 使用: 在配置了聚合的pom.xml的路径下执行
mvn install
即可
web工程的自动部署
- 配置(<project节点下>)
<!--配置当前工程构建过程中的特殊设置--> <build> <!--war包名称--> <finalName>AtguiguWeb</finalName> <!--配置构建过程中需要使用的插件--> <plugins> <plugin> <!--专门启动servlet容器的插件--> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.2.3</version> <!--针对这个插件的配置--> <configuration> <!--配置当前系统中容器的位置--> <container> <containerId>tomcat6x</containerId> <home>D:\DevInstall\apache-tomcat-6.0.39</home> </container> <configuration> <!--确认容器位置--> <type>existing</type> <home>D:\DevInstall\apache-tomcat-6.0.39</home> <!-- 如果Tomcat端口为默认值8080则不必设置该属性 --> <properties> <cargo.servlet.port>8989</cargo.servlet.port> </properties> </configuration> </configuration> <!--配置插件在什么情况下执行--> <executions> <execution> <id>cargo-run</id> <!--生命周期的阶段--> <phase>install</phase> <goals> <!--插件的目标(执行的命令)--> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
- 使用: 进入pom.xml所在目录,执行
mvn deploy
即可