你见过不长毛的羊吗

Maven简记

2019.06.27

构建相关命令

需要在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>
      

继承

父工程中统一指定依赖的版本,子工程中不指定此依赖的版本,就会自动使用父工程的版本。 Tips: 配置继承关系后,执行安装命令时要先安装父工程

  • 操作步骤:
    • 创建一个maven工程。打包方式为pom => pom
    • 子工程中声明对父工程的引用(<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工程来配置
    	<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即可