maven 初体验

Maven 是一个项目管理和构建工具

Maven是基于项目对象模型(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

---------------------------------------------------------------------------

Maven :

Bin目录:包含mvn命令运行的脚本

Boot :包含一个类加载器的框架,maven用它来加载自己的类库

Conf :配置文件

Lib:maven运行依赖的类库

----------------------------------------------------------------------------

maven的目录结构:

Maven的目录结构

Src(源代码目录)

-main

-java

-package

-test

-java

-package

-resource(存放资源文件)

------------------------------------------------------------------------------------------

Maven中的基础知识

Mvn –v 查看maven版本

mvn   -compile 编译

mvn    -test测试

mvn      -package 打包

Mvn –clean:y用来删除target(项目经过编译的字节码文件和测试报告)文件

mvn           -install:安装jar到本地仓库中(可以将jar包发布到本地仓库中)

我们通过mvn  –compile这个命令来编译源代码,如果在编译的过程中程序用到了其他的支持包,他会去pom.xml查找是否引入该依赖包的坐标,如果引入了,那么maven会先按照在dependency的坐标到本地仓库中去找,如果有,maven将会把该jar加载到该项目classpath中,如果没有找到该jar包,会按照网上的地址到maven的中央仓库去找并且下载,下载到本地仓库,供我们的项目进行使用,如果中央仓库也找不到就会报错

----------------------------------------------------------------------------------------------

常用的构建命令的框架

自动创建目录骨架(maven提供了archetype插件,用于创建符合maven规定的目录骨架)

创建目录的两种方式:

1.      archetype:generate 按照提示进行选择

2.      archetype:generate –DgroupId=组织名

-DartifactId=

-Dversion=版本号

-Dpackage=代码所存在的包

Maven中赋坐标和仓库:(所有构建通过坐标做为其唯一标识)

坐标:groupId,artifactId(项目名和模块名),version

仓库:用来管理项目的依赖,仓库分为本地仓库,远程仓库,maven所有的pom.xml都会继承一个超级的pom.xml(lib下的maven-model-builder.3.3.3.jar里面的pom.xml),url标签里的地址就是中央仓库的地址(包含了绝大多数的开源jar)

镜像仓库:(镜像就是a提供和b一样的功能)maven的中央仓库的服务器在国外,有时可能无法访问外网,但是国内有它的镜像仓库。

如何修改镜像仓库位置,

Maven 中Conf下的settings文件修改mirror

如何更改本地仓库的位置:修改settings,找到localRepository,把路径放进去即可

-------------------------------------------------------------------------------------------------

在eclispse中装maven插件,加载好插件后,建立一个maven项目,

步奏为new-maven project-next-选择。。。quickstart,next填写groupId,artifactId,version,

运行项目:选中Pom.xml右键run as      maven build,在goals里面输入maven命令:如compile编译项目,package,打包项目(在项目的target目录下:class文件,测试报告,jar文件)

--------------------------------------------------------------------------------------------------

maven的生命周期

Maven的生命周期

完整的项目构建过程:清理,编译,测试,打包,集成测试,验证,部署

Maven生命周期:(定义了三套相互独立的生命周期,每个生命周期中又包括一些阶段,其阶段是有顺序的,且后面的阶段依赖前面的阶段,执行某个阶段时,其前面的阶段会顺序执行,但不会触发另外两套生命周期的任何阶段,例如运行compile这个阶段时,package,test会自动的执行)

Clean:清理项目

Default:构建项目

Site:生成项目站点

(1)      clean清理项目

阶段:pre-clean  执行清理前的工作,

Clean  清理上一次构建生成的所有文件,

Post-clean执行清理后的工作,

(2)Default:构建项目

常用的阶段:compile,test,package,install(在运行package这个阶段时,是先运行compile和test阶段的)

(3) Site:生成项目站点

Pre-site:生成项目站点前要完成的工作

Site:生成项目站点文档

Post-site:生成项目站点后要完成的工作

Site-deploy:发布生成站点到服务----------------------------------------------------------------------------------

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><!-- 指定了当前pom的版本 -->

<!-- 坐标元素 -->
  <groupId>com.imooc.hi</groupId><!-- 反写的公司网址+项目名 -->
  <artifactId>hi</artifactId><!-- 项目名+模块名  例如 struts2_01 -->
  <version>0.0.1-SNAPSHOT</version><!-- 版本号:一般由三个数字组成,第一个表示大版本号,第二个表示分支版本号,第三个表示小版本号 -->
  <packaging>jar</packaging><!-- maven项目的打包方式,默认是jar -->

<name>hi</name><!-- 项目的描述名,产生项目文档时会使用 -->
  <url>http://maven.apache.org</url><!-- 项目的地址 -->
  <description></description><!-- 项目的描述 -->
  <developers></developers><!-- 开发人员 -->
  <licenses></licenses>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

<!-- 依赖列表 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope><!-- 依赖的范围,junit的jar只在我们的测试的依赖范围内有用 -->
      <!--maven提供的三种classpath值:编译,测试,运行,
        依赖的范围就是用来控制依赖与三种classpath的关系的,scope的属性compile(默认的,对于三种classpath都有效),test(测试范围有效,如junit),
        runtime(测试和运行有效,如jdbc的驱动实现)
        ,system(编译和测试有效,与本地系统相关联),import(只用于dependencyManagement,表示从其他pom继承过来的依赖),
        provided(编译和测试有效,如当我们构建一个web项目时,
        编译和测试时可以依赖 servlet API,运行时并不会被加入,因为web容器已经包含servlet API),具体查看maven官网文档
     -->
       
      <optional></optional><!-- true 和false用来设置依赖是否可选,默认是false,如果是false,子项目默认是继承的 -->
      <exclusions><!-- 排除依赖传递的列表 -->
        <exclusion></exclusion><!-- 比如a依赖b,b依赖c,那么c对于a来说就是传递依赖,如果a不想依赖c,就可以使用这个标签 -->
        <!--  -->
        
      </exclusions>
    </dependency>
  </dependencies>
  <!-- 依赖的管理,它不会被运行 ,不会被引入到实际的依赖中,主要是定义在父模块中,供子模块所继承用的,即公共的 -->
  <dependencyManagement>
     <dependencies></dependencies>
  </dependencyManagement>
  <!--  ,对构建的行为提供相应的支持-->
  <build>
    <!--  插件  -->
    <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                  <!--  运行package命令时就能将source的源码打包,绑定source到default生命周期的package阶段 -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>
    </plugins>
  </build>
  <!-- 通常用于子模块中对父模块的pom的继承 -->
<!--   <parent></parent> -->
  <!-- 是用来聚合运行多个的maven项,如果有很多的maven模块需要编译,就不需要一个个编译 -->
  <modules></modules>
</project>

------------------------------------------------------------------------------------------------

依赖的范围scope

maven提供的三种classpath值:编译,测试,运行,
        依赖的范围就是用来控制依赖与三种classpath的关系的,scope的属性compile(默认的,对于三种classpath都有效),test(测试范围有效,如junit),
        runtime(测试和运行有效,如jdbc的驱动实现)
        ,system(编译和测试有效,与本地系统相关联),import(只用于dependencyManagement,表示从其他pom继承过来的依赖),
        provided(编译和测试有效,如当我们构建一个web项目时,
        编译和测试时可以依赖 servlet API,运行时并不会被加入,因为web容器已经包含servlet API),具体查看maven官网文档

------------------------------------------------------------------------------------------------------

依赖冲突:短路优先,例如:

A->B->C->X(jar)

A->D->X(jar)这个会优先解析

在依赖路径长度相同的情况下,先声明dependency先优先

------------------------------------------------------------------------------------------------------

聚合与继承

聚合:是用来聚合运行多个的maven项,如果有很多的maven模块需要编译,就不需要一个个编译

<modules>
     <module>../hongxing-nage</module>
      <module>../hongxing-bge</module>
      <module>../hongxing-shanji</module>
  </modules>

继承:

<parent>
        <groupId>com.hongxing</groupId>
        <artifactId>hongxing-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

----------------------------------------------------------------------------------------------------

使用maven构建web项目:

使用maven新建maven项目,发布到tomcat中

  1. 首先在建立时选择maven-archetype-webapp

2.      导入servlet依赖

3.      检查classes文件的输出路径,项目输出路径在项目的target目录的classes(项目右键->bulidpath->config build path->source)

4.      将项目转换为web项目并添加文件夹构建maven目录结构:

项目右键->properties-project facets->dynamic web module(勾选)

5.      更改项目部署时的默认配置:

项目右键->properties->deployment Assemby-> (部署时不需要发布test文件,如果有,则移除)

6.添加tomcat

可以使用项目右键-run as –maven build..-tomcat:run(或 clean package)启动tomcat服务

<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.0</modelVersion>
  <groupId>com.sj.webapp</groupId>
  <artifactId>webDemo2</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webDemo2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
   
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>webDemo2</finalName>
    <plugins>
        <plugin>
             <groupId>org.apache.tomcat.maven</groupId>
             <artifactId>tomcat7-maven-plugin</artifactId>
             <version>2.2</version>
            <executions>
                <!-- 在打包成功后使用tomcat:run来运行tomcat服务 -->
                <execution>
                  <phase>package</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                 </execution>
                
            </executions>
        </plugin>
    </plugins>
  </build>
</project>

时间: 2024-10-17 15:45:40

maven 初体验的相关文章

maven初体验

第一次用maven生成ssh工程 发现一个警告: “Description Resource Path Location TypeBuild path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace that are strictly compatible with this environment. ssh Build path JRE System Library P

Maven项目搭建(一):Maven初体验

今天给大家介绍一个项目管理和综合工具:Maven. Maven: maven读作 ['meivin],本意是指可以被信任的领域专家,致力于传播知识(来自于http://en.wikipedia.org/wiki/Maven). Maven是一个跨平台的项目管理工具.来源于Apache的开源项目.主要服务于基于Java平台的项目构建.依赖管理和项目信息管理. Maven是一款优秀的构建工具 我们一直在不停地需找避免重复的方法.设计的重复.编码的重复.文档的重复,当然还有构建的重复.Maven最大化

Linux初体验(五)

Linux初体验(五) 文件通配符 绝对路径与相对路径 发邮件 file tree 文件通配符 用途说明 文件通配符是一种简洁高效的语句,主要用来精确搜索或模糊搜索文件.其用一个或多个特殊的字符来实现对真正字符的替换,从而完成相关的任务. 在Linux中,主要有以下文件通配符: *  匹配零个或多个字符 ?  匹配任意单个字符 ~  当前用户家目录 ~username  用户家目录  [0-9]  匹配一个数字范围 [a-z]  大写与小写字母 [A-Z]  大写字母 [ ]  匹配列表中的任意

【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

[阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问.NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.OTS应用程序可以使用阿

IDEA+SpringBoot MyBatis Dynamic SQL的初体验(一)

ybatis generator在2017年12月发布了version 1.3.6,在该版本添加了新的TargetRuntime: MyBatis Dynamic SQL(mybatis 动态SQL)    Mybatis Dynamic Sql与以前TargetRuntime相比较: 移除了XXXExamle类和xml文件,代价是不兼容其他的TargetRuntime java版本限制,生成器将需要运行Java 8,低版本可能会出现错误 代码逻辑相对以前,使用了 lambda表达式,是的较容易

Netty初体验

一.概述 Netty基于NIO的网络编程框架,是一个封装了NIO复杂的底层细节,可以拿来开发高并发的服务端和客户端的程序,简单直白你可以理解它就是一个好用的处理socket的东西就行啦. 二.Netty初体验 首先,创建maven工程添加Netty依赖,新建两个包,一个是客户端,一个服务端,先来看看服务端代码,这个是服务器类,主要的逻辑都在这里实现. public class Server { public static void main(String[] args) throws Excep

spring cloud 初体验

spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有点数据中心的概念)然后去调用客户端各个的应用. 1.注册端代码: 直接创建maven项目: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关