Maven 详解及常用命令

一、Maven 介绍

1.1、Maven 是什么?

(1) Maven 是主要服务基于java平台的项目构建,依赖管理和项目信息管理的一个工具。即 Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model,POM文件) 。

(2)项目构建包括清理,编译,测试到生成测试报告,再到打包和部署;依赖管理是maven借助于坐标来实现的。

(3)maven是跨平台的,可以在windows,linux和mac OS等系统上运行。

查询开源公共依赖jar : https://mvnrepository.com/

1.2、Maven 目录结构

(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.3、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目录
Maven 详解及常用命令_第1张图片

二、Maven 的安装

  • 第一步,官网下在地址 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>
	 
	
	
	
	
	

三、Maven 的 settings.xml 说明

参考官网: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>

四、maven常用几个命令

---------------实际应用-----------------------
# 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。

五、pom.xml文件的常用配置说明

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

你可能感兴趣的:(Java,基础,maven)