Maven

一、Maven概念

1.什么是Maven

1.1 举例

案例一:

问题:

假如你正在使用idea开发两个Java项目,它们称为项目A、项目B,其中项目A中的一些功能依赖于项目B中的某些类,那么如何维系这种依赖关系的呢?

解决办法

需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。

缺陷

1.如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作
2.如果我们所依赖的jar包,功能修改了,我们要想使用修改过后的新功能,必须重新打包,添加到我们的项目中
案例二:

问题

一个公司有可能同时开发好几个项目,那么这几个项目,都是要用到相同的几十个jar包,怎么解决这个问题?

解决办法

其实这个问题很好解决,我们只需要把这些jar包给整理好,那个项目中要用到这些jar包,我们就把jar包复制到那个项目中即可!

缺陷

会导致每个项目体积很大,体积很大的一个原因就是因为jar包太多,而且还不好管理,如果我们不小心导入了重复的jar包,出现了jar包冲突的问题,那这个问题就不太好解决了

总结:

上面两个问题的描述,其实都属于项目与项目之间依赖的问题,如果我们人为手动的去解决,很繁琐,也不方便,所以使用maven来帮我们管理

1.2 Maven概念

Maven是一个Apache公司的开源项目,是项目构建工具。用来管理依赖。
使用maven可以在项目中不用导入项目依赖的jar包,省去了下载和导入jar包的过程,使项目的大小等到了缩减。

2.Maven的主要两大功能

2.1依赖管理

将jar包进行统一管理存放到一个文件夹中(仓库),要用到jar包,我们就去文件夹中(仓库)中取(jar包的坐标),就可以了

2.2一键构建

从项目的编译 、测试、运行、打包、安装、部署等一系列的动作,都由maven来管理

3.Maven的下载与安装

3.1 下载

下载地址:http://archive.apache.org/dist/maven/maven-3/

3.2 安装

省略:参考《maven基础文档》即可

4.仓库的种类和彼此关系

  • 本地仓库

    Maven会将工程中依赖的Jar包从远程下载到本机一个目录下管理.

    每个电脑默认的仓库是在 $user.home/.m2/repository下,一般我们不使用默认的仓库,需要自己设置仓库目录

    • 修改默认仓库

      找到maven软件的目录,例如:D:\soft\developsoft\apache-maven-3.5.2,

      找到settings.xml配置文件,并修改

    • <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 	http://maven.apache.org/xsd/settings-1.0.0.xsd">  
              <!-- localRepository
             | The path to the local repository maven will use to store artifacts.
             |
             | Default: ${user.home}/.m2/repository
            <localRepository>/path/to/local/repo</localRepository>
            -->
          <localRepository>D:/soft/developsoft/repository_maven</localRepository>
          
      </settings>
      
      
  • 私服仓库

    一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问私服可以使用的是局域网,中央仓库必须使用外网也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。

    • 注意连接私服,需要单独配置。如果没有配置私服,默认不使用

    • 配置私服

        <mirrors>
            <!--  配置阿里的私服  -->
      		<mirror> 
      			<id>nexus-aliyun</id> 
      			<mirrorOf>central</mirrorOf>
      			<name>Nexus aliyun</name>
      			<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
      		</mirror>
      	
        </mirrors>
      
      
  • 中央仓库

    Maven内置了远程公用仓库:http://repo1.maven.org/maven2 这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主

    工程依赖的jar包如果本地仓库没有,默认从中央仓库下载

5.Maven标准目录结构

pom.xml                 	 核心配置
src/main/java                java源码
src/main/resources           java配置
src/main/webapp              web项目中 WebRoot目录
	|-- WEB-INF
       |-- web.xml
src/test                    测试
target                      输出目录

6.Maven的常用命令

clean:  // 消除所有编译后的资源
compile:// 编译mavent程序
test: // 不仅编译,而且执行测试代码(将所有的测试代码,都会执行一遍)
package:// 不仅编译,而且测试,还打包
install: // 不仅编译、测试、打包、而且把打包的程序,放在了本地仓库

7.Maven的生命周期

clean生命周期

pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作

二、idea集成Maven

1.idea安装Maven

操作步骤: 省略

2.创建maven工程

2.1 使用骨架创建maven的java工程

2.2 不使用骨架创建maven的java工程

2.3 使用骨架创建maven的web工程

操作步骤: 省略

2.4 指定web资源

java --> 只放java代码,不用放jsp页面
webapp  --> 页面jsp 和 静态资源
在创建好的工程中,有的时候少了一个目录,resources 。
我们需要自己手动创建文件夹resources,并选中此文件夹,右键--> Mark Directory as --> Test Resources Root

2.5 在maven工程中,导入jar包

在pom文件中:

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

2.6 解决jar包冲突问题

<dependency>标签中添加<scope>标签值为provided

解释说明:

scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。

compile

默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。

test

该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。

runtime

依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。
此类的驱动都是为runtime的类库。

provided

该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。

system

使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。

import

这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。

2.7 在maven中添加插件

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>


             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
                 </configuration>
             </plugin>


        </plugins>
    </build>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值