maven
构建
清理:将之前编译的class字节码文件删除
编译:将java源程序编译成为class字节码文件
测试:自动测试,自动调用junit程序
报告:测试程序执行的结果
打包:动态web工程打war包,java工程打jar包
安装:将打包得到的文件复制到仓库中指定的位置
部署:将动态web工程生成的
TODO 待整理
mvn -v 查看maven版本
mvn clean 清理
mvn compile 编译
mvn test-compile 编译测试程序
mvn test 执行测试
mvn package 打包
mvn install 安装到本地仓库
目录结构
src 源码 主程序
main
- java 源文件
- resources 框架配置文件
test
- java
- resources
pom.xml
POM
Project Object Model 项目对象模型
pom.xml maven的核心配置文件
坐标
groupid: 公司域名倒叙+项目名
artifactid: 模块名
version: 版本
依赖
依赖的范围
①compile
- 对主程序是否有效(main):有效
- 对测试程序是否有效(test):有效
- 是否参与打包:参与
②test
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
③provided
只参与开发环节,部署运行时不需要,在服务器上存在,如servlet-api.jar
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
④runtime
运行时有效,编译时无效,如JDBC
依赖的传递性
非compile范围的无法传递
依赖的排除
<exclusions>
依赖的原则
作用:解决各模块之间jar包冲突问题
路径最短原则
路径距离相同的情况下,先声明者优先,dependency的声明顺序
版本的统一管理
使用<properties>使用自定义标签号
<properties>
<spring.version>4.1.2</spring.version>
</properties>
依赖中使用版本
${spring.version}
仓库
本地仓库:
私服:局域网内的
中央仓库:
中央仓库镜像:为了分担中央仓库的流量
仓库中包含
①maven工程所需要的插件
②第三方框架或工具的jar包
③自己开发的Maven工程
生命周期
无论是执行哪个阶段,都会从最初的位置开始执行
maven有三套生命周期
一、clean生命周期 在构建之前进行一些清理工作
pre-clean clean之前完成的工作
clean 移除上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
二、Default 生命周期 构建的核心,编译、测试、打包、安装、部署 每个都是一个目标goal 在插件中指定目标
validate:
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包
complie
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录
test-complie 编译测试代码
process-test-classes
test 测试
prepare-package
package 打包
pre-integration-test
integration-test
post-integration-test
verify
install 安装至本地仓库
deploy 复制到远程仓库
三、Site生命周期 生成项目报告、站点、发布站点
pre-site:执行一些需要在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy:将生成的站点文档部署到服务器上
插件中配置该插件执行的生命周期
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<phase>compile</phase> 生命周期
<goals>
<goal>jar<goal> 目标
</goals>
</execution>
</executions>
</plugin>
继承
继承父工程的版本
在父工程中进行统一的依赖管理,子工程也可以不使用该依赖的version
依赖管理
<dependencyManagement>
<dependencies>
<denpendency>
</denpendency>
</dependencies>
</dependencyManagement>
聚合
在maven工程中可以配置多个模块
指定相对路径
寻找依赖的插件或者jar包 ,先寻找本地仓库,连接中央仓库下载
配置构建过程
maven 有一个超级pom 在lib下的maven-model-builder.jar中
可以使用mvn help:effective-pom命令来查看完整的pom文件(包含有超级pom内容的pom文件
命令
mvn cobertura:cobertura 测试代码的覆盖率统计信息
mvn archetype:create -DgroupId= -DartifactId= -DpackageName= 创建maven工程
mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar 上传jar包到本地仓库
mvn help:describe -Dplugin=插件名称 查看插件的目标
mvn help:describe -Dplugin=插件名称 -Dfull
mvn help:active-profiles 查看所有的激活的profiles 会按照从上到下的顺序覆盖,会取用最后一个profile的属性值
mvn help:all-profiles 查看所有的profiles
profiles 可以写在pom.xml 也可以抽离出来,写在settings.xml
使用
</os>
<file>
</file>
<property> 匹配某个属性值
<name></>
<value></>
</property>
在settings.xml中激活profile,不能激活pom.xml中的profile
在maven中profiles只有repositories/pluginRepositories/properties可以再settings.xml中定义,其他属性必须在pom.xml中使用
maven的六类属性
一、内置属性
${basedir}表示根目录(含有pom.xml的文件目录) ${version} 项目版本
二、POM属性
${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java
${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java
${project.build.directory}:项目构建输出目录,默认为target/
${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/
${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/
${project.groupId}:项目的groupid
${project.artifactId}:项目的artifactid
${project.version}:项目的version,等价于${version}
${project.build.fianlName} 项目打包的名称,默认为${project.artifactId}-${project.version}
三、自定义属性
可以在POM的
四、Settings属性
用户使用settings.开头的属性引用settings.xml文件中XML元素的值
五、Java系统属性
所有java系统属性都可以使用Maven属性引用
六、环境变量属性
所有环境变量都可以使用env.开头的maven属性引用
maven的属性过滤
在build中添加resources进行属性文件过滤,替换属性值
resources中定义那些目录下的文件会被配置文件中定义的变量替换
表示src/main/resources下的所有properties文件中的变量都会替换
src/main/resources
maven配置web资源过滤
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF
</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<targetPath>WEB-INF</targetPath>
</resource>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF/jsp
</directory>
<targetPath>WEB-INF/jsp</targetPath>
</resource>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF/css
</directory>
<targetPath>WEB-INF/css</targetPath>
</resource>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF/js
</directory>
<targetPath>WEB-INF/js</targetPath>
</resource>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF/images
</directory>
<targetPath>WEB-INF/images</targetPath>
</resource>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/WebContent/WEB-INF
</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<targetPath>WEB-INF</targetPath>
</resource>
</webResources>
</configuration>
Nexus仓库管理器
默认admin/admin123
可以搭建私服
仓库分类
download remote indexes 改为true
group组仓库 仓库的合集 按照配置的顺序找jar包
- proxy代理仓库1 ——url1 type为proxy
- proxy代理仓库2 ——url2
- hosted宿主仓库 mvn deploy会提交到hosted仓库中
- snapshot部署仓库
- release部署仓库
- 第三方jar包仓库 third party/3rd party
Virtual虚拟仓库,用于适配其他类型的仓库,比如maven要兼容maven1、maven2等
想要使用私服时,需要在pom文件中配置
或者在settings中配置
或者设置镜像
在settings.xml进行配置私服
在pom文件中配置
发布工程时会用到,会发布到仓库
在发布时会使用到用户名,密码
此时应该在settings.xml中配置server
权限管理
先设置权限 privileges
再设置角色 roles
再设置用户 users
项目发布 Assembly插件
1、Assembly:一定要单独运行,不要绑定生命周期
2、Single mojo 这个和某个生命周期相关联
Assembly常用的套件描述符
1、bin - 将jar包打zip包
2、jar-with-denpendencies - 带有依赖的jar包
3、project - 将工程源代码打包
4、src - 将工程src目录下的源代码打包
默认在超级pom中带有插件的
可以使用打包
mvn assembly:single -DdescriptorId=描述符
可以在pom文件中直接配置自定义该插件
<id>create-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>GetSiteMapUrl</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>