(1) Maven 是主要服务基于java平台的项目构建,依赖管理和项目信息管理的一个工具。即 Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model,POM文件) 。
(2)项目构建包括清理,编译,测试到生成测试报告,再到打包和部署;依赖管理是maven借助于坐标来实现的。
(3)maven是跨平台的,可以在windows,linux和mac OS等系统上运行。
查询开源公共依赖jar : https://mvnrepository.com/
(1)bin:maven运行脚本,命令。
(2)boot:包含plexus-classworlds-2.2.3.jar (plexus-classworlds是一个类加载器框架,相对于java 默认类加载器,他提供了更丰富的语法以方便配置,maven使用该框架加载自己的类库)。
(3)conf:配置文件 setting.xml,修改该文件就可以在机器上全局的制定maven的行为。但一般情况下,更倾向于复制该文件到~(用户目录)/.m2/目录下,然后修改该文件,在用户范围内制定maven的行为。
(4)lib:包含maven运行时所需要的java类库,包括第三方的依赖类库。
(5)LICENSE.txt:记录了maven使用该软件的许可证。
(6)NOTICE.txt:记录了maven包含的第三方软件。
(7)README.txt:记录了maven的简要介绍。
(1)项目骨架:项目的根目录下方pom.xml
(2)项目主代码:maven认为项目的主代码是位于src/main/java目录下的,所以通常我们会在此目录下创建文件,比如…/java/com/shuyun/myweb/hello/hello.java,该java类的包名是com.shuyun.myweb.hello
(3)资源文件:maven的资源文件位于src/main/resources目录下
(4)测试文件:maven默认的测试代码目录src/test/java目录
第一步,官网下在地址 http://maven.apache.org/download.cgi
第二步,解压文件包:apache-maven-3.5.2-bin.zip是压缩包,解压到安装路径即可。
第三步,配置环境变量,类似jdk环境配置
1、创建M2_HOME环境变量,指向maven的安装目录。
2、并将%M2_HOME%\bin追加到PATH路径中。
3、调试是否安装成功,在cmd中输入 mvn -version / mvn -v
第四步,将本地仓库配置到指定路径
(*可以不进行配置,默认在C盘 : C:\Users\hawin.m2\repository)
在maven解压文件中,conf目录中修改settings.xml文件(D:\maven-3.5.2\conf\settings.xml)。可以添加新的仓库路径
D:\maven-3.5.2\repository
第五步,配置了中央仓库的镜像(换成了阿里的,比较稳定)
阿里云 官方指导文档 https://maven.aliyun.com/mvn/guide
settings.xml 文件中,在mirrors标签中添加子标签如下:
<mirrors> ...mirrors> <mirror> <id>nexus-aliyunid> <name>nexus-aliyunname> <url>http://maven.aliyun.com/nexus/content/groups/publicurl> <mirrorOf>centralmirrorOf> mirror> <mirror> <id>nexus-aliyunid> <mirrorOf>centralmirrorOf> <name>Nexus aliyunname> <url>https://maven.aliyun.com/repository/publicurl> mirror> <mirror> <id>aliyunmavenid> <mirrorOf>*mirrorOf> <name>阿里云公共仓库name> <url>https://maven.aliyun.com/repository/publicurl> mirror>
Mirror
mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
<mirrorOf>*mirrorOf> 匹配所有仓库请求,即将所有的仓库请求都转到该镜像上 <mirrorOf>repo1,repo2mirrorOf> 将仓库repo1和repo2的请求转到该镜像上,使用逗号分隔多个远程仓库。 <mirrorOf>*,!repo1miiroOf> 匹配所有仓库请求,repo1除外,使用感叹号将仓库从匹配中排除。
<mirror>
<id>nexus-aliyunid>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
参考官网:http://maven.apache.org/guides/mini/guide-mirror-settings.html
# 1. 声明规范
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
# 2. localRepository 本地仓库配置
<localRepository>usr/local/mavenlocalRepository>
# 3. interactiveMode
<interactiveMode>trueinteractiveMode>
# 4. usePluginRegistry
<usePluginRegistry>falseusePluginRegistry>
# 5. offline
<offline>falseoffline>
# 6. pluginGroups
<pluginGroups>
<pluginGroup>org.codehaus.mojopluginGroup>
pluginGroups>
# 7. proxies
<proxies>
<proxy>
<id>myproxyid>
<active>trueactive>
<protocol>httpprotocol>
<host>proxy.somewhere.comhost>
<port>8080port>
<username>proxyuserusername>
<password>somepasswordpassword>
<nonProxyHosts>*.google.com|ibiblio.orgnonProxyHosts>
proxy>
proxies>
# 8. servers
<servers>
<server>
<id>server001id>
<username>my_loginusername>
<password>my_passwordpassword>
<privateKey>${usr.home}/.ssh/id_dsaprivateKey>
<passphrase>some_passphrasepassphrase>
<filePermissions>664filePermissions>
<directoryPermissions>775directoryPermissions>
server>
servers>
# 9. mirrors
<mirrors>
<mirror>
<id>planetmirror.comid>
<name>PlanetMirror Australianame>
<url>http://downloads.planetmirror.com/pub/maven2url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
# 10. profiles
<profiles>
<profile>
<id>testid>
profile>
profiles>
# 11. Activation
<activation>
<activeByDefault>falseactiveByDefault>
<jdk>1.5jdk>
<os>
<name>Windows XPname>
<family>Windowsfamily>
<arch>x86arch>
<version>5.1.2600version>
os>
<property>
<name>mavenVersionname>
<value>2.0.3value>
property>
<file>
<exists>${basedir}/file2.propertiesexists>
<missing>${basedir}/file1.propertiesmissing>
file>
activation>
# 12. properties : note:如果该profile被激活,则可以再POM中使用${user.install}
<properties>
<user.install>${user.home}/our-projectuser.install>
properties>
# 13. activeProfiles
<activeProfiles>
<activeProfile>env-testactiveProfile>
activeProfiles>
# 14. Repositories
<repositories>
<repository>
<id>codehausSnapshotsid>
<name>Codehaus Snapshotsname>
<releases>
<enabled>falseenabled>
<updatePolicy>alwaysupdatePolicy>
<checksumPolicy>warnchecksumPolicy>
releases>
<snapshots>
<enabled/><updatePolicy/><checksumPolicy/>
snapshots>
<url>http://snapshots.maven.codehaus.org/maven2url>
<layout>defaultlayout>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<enabled/><updatePolicy/><checksumPolicy/>
releases>
<snapshots>
<enabled/><updatePolicy/><checksumPolicy/>
snapshots>
<id/><name/><url/><layout/>
pluginRepository>
pluginRepositories>
---------------实际应用-----------------------
# 1、刷新子模块版本号:
mvn versions:update-child-modules
# 2、重新打包到maven本地库:
mvn clean install -Dmaven.test.skip=true
mvn install
# 3、部署包到远程服务器
mvn clean deploy -Dmaven.test.skip=true
#---------------------一般常用命令-----------------------
# 该命令打印出所有的java系统属性和环境变量
mvn help:system 自动在本用户下创建 ~/.m2/repository
# 清理输出目录默认target/
mvn clean
mvn clean compile 清理编译
# maven test,但实际执行的命令有:clean:clean,resource:resources,compiler:compile, resources:testResources, compiler:testCompile,maven在执行test之前,会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,测试代码编译通过之后默认在target/test-calsses目录下生成二进制文件,紧接着surefile:test 任务运行测试,并输出测试报告,显示一共运行了多少次测试,失败成功等等
mvn clean test 清理测试
mvn clean package 清理打包
mvn clean install 清理将打包好的jar存入 本地仓库 注意是本地仓库
mvn clean deploy 根据pom中的配置信息将项目发布到远程仓库中
echo %MAVEN_HOME%:查看maven安装路径
---------------------创建项目-------------------------------
mvn -version/-v 显示版本信息
mvn archetype:generate 创建mvn项目,使用Archetype生成项目骨架
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app 创建mvn项目
# 创建Maven的普通java项目:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName
# 创建Maven的Web项目:
mvn archetype:create -DgroupId=packageName -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp
---------------------优化依赖命令-------------------------------
mvn dependency:list 显示所有已经解析的所有依赖
mvn dependency:tree 以目录树的形式展现依赖, 最高层为一层依赖 其次二层依赖 三层依赖....
mvn dependency:analyze 第一部分显示 已经使用但是未显示依赖的的 第二部分显示项目未使用的但是依赖的
---------------------第三方jar 发布到远程仓库---------------------
mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/
---------------------第三方jar 安装到本地仓库---------------------
mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DdownloadSources=true -DdownloadJavadocs=true
#你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的.参数: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”)
mvn help:describe -Dplugin=help -Dmojo=describe
mvn -e 显示详细错误 信息.
mvn validate 验证工程是否正确,所有需要的资源是否可用。
mvn test-compile 编译项目测试代码。 。
mvn integration-test 在集成测试可以运行的环境中处理和发布包。
mvn verify 运行任何检查,验证包是否有效且达到质量标准。
mvn generate-sources 产生应用需要的任何额外的源代码,如xdoclet。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cuiyaonan2000groupId>
<artifactId>mavenartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<name>maven项目模板的基本使用name>
<description> 这里的描述不知道是干吗用description>
<properties>
<springframework.version>2.5.6springframework.verson>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.7version>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.5source>
<target>1.5target>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<configuration>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
<repositories>
<repository>
<id>jbossid>
<name>JBoss Repositoryname>
<url>http://repository.jboss.com/maven2/url>
<release>
<enabled>trueenabled>
release>
<snapshots>
<enabled>falseenabled>
snapshots>
<layout>defaultlayout>
repository>
repositories>
<distributionManagement>
<repository>
<id>proj-releaseid>
<name>Proj Release Repositoryname>
<url>http://192.168.89.130url>
repository>
<snapshotRepository>
<id>proj-releaseid>
<name>Proj Release Repositoryname>
<url>http://192.168.89.130url>
snapshotRepository>
distributionManagement>
build>
project>