欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven

程序员文章站 2024-02-08 14:28:58
...

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