zoukankan      html  css  js  c++  java
  • maven入门基础

    1.Maven是什么

    Maven是一种构建工具(构建是指例如完成清理,编译,测试,打包,发布等一些自定义的过程),类似于make(最早的构建工具,通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为),ant(ant可以看成一个java版 的make,ant 可以跨平台(基于java的原因),且使用xml定义构建脚本,相对于make来说更友好),gradle(基于ant与maven的开发,后续可能取代maven,就好像git逐渐取代svn)

    2. maven的安装

    下载地址:http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.3/binaries/

    安装:https://jingyan.baidu.com/article/6c67b1d646ae842786bb1e7a.html

    3.maven的安装目录解析

    bin: 该目录包含了mvn的运行的脚本

    boot: 只包含一个文件类加载器框架,保证maven加载自己的类库

    conf:配置文件,里面有一个非常重要的setting.xml文件,直接修改可以用于全局,但是一般更偏向于复制到用户目录/.m2/目录下然后修改文件,作用范围为用户范围。

    修改仓库地址:

    修改setting.xml(最好是用户目录)<localRepository>/path/to/local/repo</localRepository>,默认的位置在Default: ${user.home}/.m2/repository,在seting.xml的文件中有说明

    4.maven文件的结构(运行tree/F)

    备注:可以手动建立,可以采用mvn  archetype:generate 来建立,也可以采用eclipse的maven插件自动生成等,实现原则约定优于配置

     

     备注:maven的目录结构和原java的目录结构的构建是有所区别的,这个是在不改变编译后路径的前提下,

    5.pom配置简要说明

    <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/xsd/maven-4.0.0.xsd">
    
          <modelVersion>4.0.0</modelVersion>
    
          <groupId>com.cgz.cgz</groupId>
    
          <artifactId>maventest</artifactId>
    
          <version>0.0.1-SNAPSHOT</version>
    
          <name></name>
    
    </project>
    

    说明:

    xsd约束文件;

    modelVersion 版本,POM文件是遵从哪个版本的项目描述符,默认一般不要去更改

    groudID  通常是公司名加项目组

    artifactid 项目组中项目的id(唯一)

    version  版本,SNAPSHOT表示快照版,在通常情况下不稳定,不建议使用,建议使用release版本较为稳定

    name:可以省略不写,通常情况下建议写,进一步对项目的名称进行说明。

    package:打包方式,jar,war,pom,package,默认为jar

    6.maven在windows下的常用命令

    mvn  compile  编译  相应的产生一个target文件夹

    mvn  clean 清除 删除target文件

    mvn  test  测试

    mvn  package 打包

    mvn  install 将其打包加入本地仓库

    7.maven的生命周期

    maven的生命周期有3个,clean清理(clean插件),default构建项目(一系列插件),site建立项目网点(site插件)

    整个生命周期如下

    Pre-clean 执行一些清理前需要完成的工作------Clean 清理上一次构建生成的文件--------Post-clean 执行一些清理后需要完成的工作-----Clean命令 实现的是pre-clean和clean阶段

    Default生命周期

    validate ----Initialize----generate-sources----process-sources----generate-resources-----process-resources----compile----process-classes----generate-test-sources--process-test-sources----generate-test-resources----process-testresources----test-compile----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 生成站点 发布到服务器上

    备注

    mvn compile  从validate运行到compile 阶段,不包括clean周期。

    mvn test 从validate运行到test阶段,包括compile周期,不包括clean周期

    mvn package 从validate运行到package 阶段,包括test周期,不包括clean周期

    mvn insatall 从validate运行到deploy 阶段,包括package周期,不包括clean周期

    mvn clean deploy  site-deploy  会执行3个阶段的所有的生命周期

    上编译,测试,打包,安装前先进行clean操作,否则上述可能存在缓存的问题导致,例如compile后修改配置的scope再使用test,不会再次使用compile,而是在compile的基础上进行test。

    8.依赖

    常规配置

    <dependencies>
          <dependency>
              <groupId>javax.servlet</groupId>    
              <artifactId>servlet-api</artifactId>
              <version>2.5</version>
              <type>...</type>
              <scope>provided</scope>    
              <exclusions>   
                    <exclusion>...</exclusion>
                        ...
              </exclusions>
              <optional>...</optional>
         </dependency>
    <dependencies>   
    

    groupId,artifactid,version类似于上,scope依赖范围(没写默认为compile),

    type类似于上的package(没写默认为jar),exclusions排除传递性依赖(排除依赖pom中的依赖,排除后不再具有传递性),options 值为true或者false可选依赖(不具有传递性)

    2)依赖的范围和传递性

    依赖范围就是用来控制依赖与3种classpath之间的关系(编译classpath,测试claspath,运行classpath)

    compile:编译依赖的范围,编译,测试,运行三种classpath都有效(具有传递性)

    test:对测试范围有效(不具有传递性,且不会编译在src/main/java下的内容)

    provided:对编译和测试有效(不具有传递性)

    3)依赖树的查看

    mvn  dependency:list  查看依赖树

    mvn dependency:tree 更加清晰的看到依赖由那条路径引入

    mvn dependency:analyze 可帮助显示当前项目的直接依赖

     

     4)依赖的优先级

    路径优先原则和声明优先原则

    路径优先原则:多个文件依赖于同一种jar,但是版本不同,那么路径较短者优先

    声明优先原则:多个文件依赖于同一种jar,但是版本不同,那么那个先声明那么那个就优先

    假如需要自己指定的版本的jar,那么自己指定的优先,在一个pom里面重复书写了多个不同版本的jar,那么就是最后指定的那个

    5)依赖的需求

    需要在本地仓库中或者自定义的远程仓库中或者私服中存在,否则会依赖错误,例如自己写的一个文件需要依赖自己需写的另一个文件,那么另一个文件首先需要install,否则会找不到依赖文件

    9.聚合与继承

    1)聚合

    聚合的创建,首先创建一个maven project项目,maven project项目需要满足的条件打包方式packging必须是<packaging>pom</packaging>,然后创建一个maven  module,有一个父类的选择,选择刚刚创建的maven project项目,创建完成后的变化如下

    <!-- maven  module -->
    <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 选择parent是自动添加的 --> <parent> <groupId>cn.jdbc.test</groupId> <artifactId>jdbctest</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
      <!--取的artifactId--> <artifactId>testjdbcmudle1</artifactId> </project>
    <!-- maven project -->
    <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.jdbc.test</groupId> <artifactId>jdbctest</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 必须为pom --> <packaging>pom</packaging> <name>jdbctest</name> <!-- 创建maven module 聚合时自动添加的 相对路径,相对于parent 项目文件的路径--> <modules> <module>testjdbcmudle1</module> </modules> </project>

     聚合的作用:我们只需要构建常见的 maven project(parent),那么modules中的<module>testjdbcmudle1</module>会跟随构建,这样做的目的是模块化

    2)继承

    继承的创建,首先创建一个maven project项目,maven project项目的条件打包方式packging必须是<packaging>pom</packaging>,然后创建一个maven project项目的parent是前建立的pom的maven project项目,继承不可以多继承。

    <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/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>cn.jdbc.test2</groupId>
    	<artifactId>jdbctest2</artifactId>
    	<name>jdbctest2</name>
    	<description>jdbctest2</description>
    	<parent>
    		<groupId>cn.jdbc.test</groupId>
    		<artifactId>jdbctest</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<!-- 相对该pom.xml的父pom.xml的位置 -->
    		<relativePath>../jdbctestparent/pom.xml</relativePath>
    	</parent>
    </project>
    

     父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/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>cn.jdbc.test</groupId>
    	<artifactId>jdbctest</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<!-- 必须为pom -->
    	<packaging>pom</packaging>
    	<name>jdbctest</name>
    	<dependencies>
    			<dependency>
    				<groupId>org.junit.jupiter</groupId>
    				<artifactId>junit-jupiter-api</artifactId>
    				<version>5.2.0</version>
    				<scope>test</scope>
    			</dependency>
    			<dependency>
    				<groupId>mysql</groupId>
    				<artifactId>mysql-connector-java</artifactId>
    				<version>8.0.11</version>
    			</dependency>
    	</dependencies>
    </project>
    

     按需求实现,在子maven里面需要的话,那么在子maven中需要重写

    <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/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>cn.jdbc.test</groupId>
    	<artifactId>jdbctest</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<!-- 必须为pom -->
    	<packaging>pom</packaging>
    	<name>jdbctest</name>
            <!-- 依赖的自定义实现 -->
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.junit.jupiter</groupId>
    				<artifactId>junit-jupiter-api</artifactId>
    				<version>5.2.0</version>
    				<scope>test</scope>
    			</dependency>
    			<dependency>
    				<groupId>mysql</groupId>
    				<artifactId>mysql-connector-java</artifactId>
    				<version>8.0.11</version>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    </project>
    

     对于插件的继承也是同样,头部和尾部省略,替换整个</dependencyManagement>模块即可

    <build>
    		<pluginManagement>
    			<plugins>
    				<plugin>
    					
    				</plugin>
    			</plugins>
    		</pluginManagement>
    </build>
    

     依赖的优先级上面已经说明,这里不再重复

    3)可继承元素

    groupId:项目组ID,项目坐标的核心元素。

    version:项目版本,项目坐标的核心元素。

    description:项目的描述信息。

    organization:项目的组织信息。

    inceptionYear:项目的创始年份。

    url:项目的URL地址。

    developers:项目的开发者信息。

    contributors:项目的贡献者信息。

    distributionManagement:项目的部署配置。

    issueManagement:项目的缺陷跟踪系统信息。

    ciManagement:项目的持续集成系统信息。

    scm:项目的版本控制系统信息。

    mailingLists:项目的邮件列表信息。

    properties:自定义的Maven属性。

    dependencies:项目的依赖配置。

    dependencyManagement:项目的依赖管理配置。

    repositories:项目的仓库配置。

    build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。

    reporting:包括项目的报告输出目录配置、报告插件配置等。

    4)依赖的版本管理

           <properties>
                     <springframework.version>5.0.4.RELEASE</springframework.version>
            </properties>
    
            <dependencies>    
                     <dependency>
                               <groupId>org.springframework</groupId>
                               <artifactId>spring-core</artifactId>
                               <version>${springframework.version}</version>
                     </dependency>               
                     <dependency>
                               <groupId>org.springframework</groupId>
                               <artifactId>spring-beans</artifactId>
                               <version>${springframework.version}</version>
                     </dependency>               
            </dependencies>
    

    10.其他

    1)eclipse maven项目的导入

    Import –maven –existing maven project

    2)eclipse查看仓库地址

    Window—preference—maven –usersetting ,在用户目录下setting.xml文件中的仓库位置配置

    3)eclipse添加本地的依赖

     

    4)eclipse显示仓库

    Window—show view—others—maven—maven repositories

     

    5)eclipse war的运行测试

    tomcat:run

    6)http代理(基于安全因素,要求通过安全认证才能够访问,这时候就需要http代理)

    在setting.xml中的<proxies>里添加如下配置

    <proxy>
          <id>optional</id>
          <active>true</active>
          <protocol>http</protocol>
          <username>proxyuser</username>
          <password>proxypass</password>
          <host>proxy.host.net</host>
          <port>80</port>
          <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    

    备注:<nonProxyHosts>用来指定那些主机名不需要代理,可以用|符号来分隔多个主机名,支持通配符,如*

    11.maven运用过程中遇到的一些问题和解决方法。

    1)[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

    解决方法:在pom.xml中添加如下配置

    <properties>
          <project.build.sourceEncoding> UTF-8</project.build.sourceEncoding>
    </properties>
    

    2)项目下的文件及文件夹没有报错,但是该项目的项目文件夹报错

    解决方法:在该项目上鼠标右键,选择maven,然后选择update project,这个会在修改pom后经常出现,例如在maven中更改jre编译环境时,就会出现红叉,按上述操作后会更新jre版本及去除红叉

    3)Error code 401, Unauthorized

    解决方法:在~/.m2文件夹下添加setting文件,并在setting文件中的servers中添加相应的server认证

    4)maven的packaging为war时缺少文件

    解决方法:该项目鼠标右键选择properties,然后选择project facts,然后取消Dynamic web module  选择应用 ,然后选择Dynamic web module 选择应用

    5)ERROR]No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

    解决方法:点击window选择properties,然后选择java下的install jres ,配置相应的正确的jdk路径和jdk,而不是jre

    6)在maven中test依赖修饰的jar只能使用在test的文件夹下,不能使用在main的文件夹下,例如程序包org.junit不存在,因为作用范围没到compile所以报不存在

    7)修改jdk版本

    <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-compiler-plugin</artifactId>
                     <version>3.7.0</version>
                     <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
                     <encoding>UTF-8</encoding>
                     </configuration>
    </plugin>
    

    也可以在setting中配置成全局的配置

    <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> 
    
  • 相关阅读:
    R语言使用RMySQL连接及读写Mysql数据库
    sparkR介绍及安装
    信息熵的计算
    django学习-管理界面、视图
    django学习-数据库操作接口API--(CRUD)
    django学习-数据库配置-创建模型
    django学习-安装、创建应用、编写视图
    接口八问 & 接口测试质量评估标准
    robotframework-post request请求携带上一个请求返回的cookie
    pipenv安装包时一直卡在Locking [packages] dependencies…,换pypi源
  • 原文地址:https://www.cnblogs.com/gg128/p/9311872.html
Copyright © 2011-2022 走看看