浅析Maven项目构建

        在介绍什么是Maven之前,我们先来想一个小问题:

        使用idea写了两个Java的小项目,姑且把它们称作项目A与项目B,项目A的代码中需要依赖项目B中的某些类,应该如何操作才能解决这个问题?

        在原来如果我们遇到了这种问题,大致是这样的:因为A需要依赖B中的类,所以我们把项目B打成一个jar包,然后在A项目的External Libraries中导入这个jar包,这样的话,A项目就可以使用B项目中的某些类了。我们也就达成了我们想要实现的操作了。但是!这种方法其实是存在很很多缺陷的,现在我举几个例子。

        1:假设B中的代码出现了bug,那么,如果还要继续使用A项目,就必须要先把B中的bug修改好,然后重新对B项目进行打包,最后再导入A项目。这样做其实是很繁琐的。

        2:假设项目A被发布,因为A依赖B的关系,我们选择将B包打包到A中,但是这样造成了资源的很大浪费。假设开发人员在开发依赖B的其他项目,这个时候导入了A包,相当于本地有两个B包了。另外一种方法是直接把B也发布出去,当开发人员要用到A的时候告诉他还需要导入B包,这样的话就和第一种情况一样了,我们得不停的找jar包,很麻烦。

        3:当需要使用某些框架的时候,通常需要导入框架依赖的几十个甚至上百个jar包,一个一个的寻找、导入实在是太麻烦了。

        这个问题,其实就是我们在进行项目开发时项目与项目之间存在依赖的问题·。在进行项目管理时,人为的,手动的去管理其实是很不方便的,所以这个时候我们可以使用Maven框架来帮助我们管理项目。


Maven简介

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

        但是对于还没有学过Maven的人来说,这句话其实很官方。通俗的来讲:Maven框架的功能是合理的描述项目与项目之间的依赖关系。举个例子:在一个Maven的项目中,存在名字为pom.xml的配置文件,Maven通过该文件的位置去获取jar包,我们就不用自己手动去添加项目所依赖的jar包了。

        上面出现了一个词,Maven项目。Maven项目可以这么去解释:就是在一个Java项目外包了一层Maven,本质上来讲Java项目依旧是Java项目,但是外层包了一层Maven之后就可以使用Maven框架的一些功能了,例如我们可以不用手动导入jar包而是通过pom.xml文件来导入一样。

        现在我们应该学会如何在Maven的pom.xml中配置我们所需要的jar包,现在我来解释一下pom.xml文件获取jar包的编写。

    <dependencies>//要依赖的jar包一般都放在这个标签中

        <dependency>//要依赖的第一个jar包(依赖的每一个jar包都放在这个标签中·)
            <groupId></groupId>//包名
            <artifactId></artifactId>//项目名
            <version></version>//jar包的版本
        </dependency>

        <dependency>//要依赖的第二个jar包
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
        </dependency>

        <dependency>//要依赖的第三个jar包
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
        </dependency>

    </dependencies>

        这就是Maven项目中关于jar包配置的一些代码:所有的jar包配置都应该在dependencies标签中配置,每一个jar包都在此标签下的dependency标签中,使用groupid(包名)、artifactid(项目名)、version(jar包的版本)三者共同定位jar包。

        这三个属性就可以定位一个jar包。假设上面的例子,在项目A中导入项目B的jar包,首先A,B项目应该都是Maven项目,所以在A,B项目中都会有这三个属性来定位自己,例如:

<?xml version="1.0" encoding="UTF-8"?>
<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>Num.dxy.work</groupId>//描述项目自己的包名
    <artifactId>square</artifactId>//描述自己的项目名
    <version>1.0-SNAPSHOT</version>//自己的版本号

        这是一个Maven项目中开头的几行代码,我们可以看到这里也有一组groupid,artifactid和version。这就是一个Maven项目在定位自己的三个属性,每个Maven项目在创建的时候都必须要求写上这三个属性值。如果现在要在其他的项目中导入这个项目的jar包,我们只需要在dependency标签中写上这三个属性就可以了。这样我们就成功的在其他项目中导入了这个项目的jar包了。

        但是我们现在导入的是我们自己本地的jar包,如果项目的开发涉及到本地没有的jar包的话,我们就要从仓库中获取jar包。


仓库的概念

        我们可通过Maven中pom.xml文件获取我们所需要的jar包,但是除了本地的jar包以外,其他的导入的jar包都在哪里呢?我们是从哪里获取jar包的?实际上jar包的存储位置就是仓库。

        jar包的仓库分为以下三种

                1:本地仓库

                2:第三方仓库

                3:中央仓库


1:本地仓库

        首先我们可以从本机获取jar包,jar包默认存储在本地仓库中,本地仓库默认存储位置是$user.home/.m2/repository。

例如我的本地仓库位置就是C:Users\Lenovo\.m2。我们现在来看一下repository文件夹中都有什么东西。

         这就是我的本地仓库中存储的所有jar包,一般来说我们都会从网上下载一个比较完整的jar包集合放在该文件夹下,然后在我们需要的时候就可以直接从本地的仓库中拿jar包就可以了(就是直接把jar包的三个定位信息写在pom.xml文件中)。

2:第三方仓库

        第三方仓库又称为内部中心仓库,一般来说都是企业内部的仓库,只在企业的内部使用,包含企业自身的一些私有框架的jar包以及各种镜像缓存。因为是企业内部的仓库,所以有效的减少了外部访问和下载的频率。

        一般来说企业内部都会有这种内部仓库,在做项目开发的时候员工只要从内部仓库中拿就可以了,每个人的jar包版本都一样。第三方仓库可以使用局域网,但是中央仓库必须使用外网。

3:中央仓库

        在有些情况下,在个人进行项目开发的时候会遇到本地没有所需要的jar包的情况,这个时候可以使用Maven自带的远程数据中央仓库http://search.maven.org,这里面有大量的常用类库,包含了现在世界上大部分流行的开源项目构件。中央仓库是由Maven自己维护的,目前是以Java为主。

        

        如果我们使用的是Java的IDE的话,如果我们使用的jar包本地没有的话,默认从中央仓库下载。因为我自己使用的是IDEA,所以接下来我介绍一下如何在IDEA中创建一个Maven项目以及jar包的导入。

创建一个Maven项目

        首先创建一个新项目,选择Maven项目并创建


        接下来,我们可以看见,定位一个jar包的三个属性,我们需要自己手动去设置它。


        这三个属性就是定位一个项目jar包的三个要素,我们需要自己来设置它们(最好不要用中文)。

        接下来我们一路回车就可以完成一个Maven项目的创建了。项目创建好之后,界面会直接跳转到pom.xml文件中。我们先看一下Maven项目的结构。


        如果是一个普通的Java项目,当我们导入jar包的时候都是把它放在External Libraries中,但是现在是Maven项目,我们可以看到pom.xml文件,同时还有main文件夹和test文件夹。我们一般写的代码都是放在main文件夹的java文件夹中。我们一般把测试用的代码放在test文件夹下的java文件夹中。现在我们来看pom.xml文件应该如何导入jar包。

pom.xml文件导入jar包

        现在假设我们的项目开发需要用到中央仓库中的Jama项目中的Matrix包(支持矩阵运算的jar包),本地并没有这个jar包。现在应该从中央仓库获取Jama包的groupid、artifactId、version三个属性。首先我们登陆http://search.maven.org网站,在这个网站上我们可以找到绝大多数的jar包。


        因为我们要使用的是Jama包,所以我们可以直接搜索Jama,然后我们可以看到下面的列表。


        我们直接点第一个就可以了,接下来如图所示。


        现在可以直接看到Groupid、ArtifactId、Version这三个属性了,这就是定义Jama项目的jar包的三个属性,我们直接把这三个属性填到pom.xml文件的dependency标签中就可以了。

<?xml version="1.0" encoding="UTF-8"?>
<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>MyMaven.pacg</groupId>
    <artifactId>创建的Maven项目</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>//刚刚找到的Jama项目的三个定位属性
            <groupId>com.blogspot.ostas</groupId>
            <artifactId>Jama</artifactId>
            <version>1.0.2</version>
        </dependency>
        
    </dependencies>


</project>

        现在,我们编写代码来使用这个刚刚导入的jar包。

package JamaWork;

import Jama.Matrix;

public class excitest {
    public static void main(String[] args){
        double[][] doubles = new double[][]{
                {1.0,2.0,3.0,4.0},
                {5.0,6.0,7.0,8.0},
                {9.0,10.0,11.0,12.0},
                {13.0,14.0,15.0,16.0}};
        Matrix matrix = new Matrix(doubles);
        matrix.print(1,0);
    }
}

        输出结果为该数组构成的矩阵。因此,通过Maven项目导入中央仓库的jar包并使用就算成功了。

        IDEA自带的Maven项目构建功能,如下图所示。


        IDEA中,不用像cmd一样需要输入命令,可以实现

        compile:src/main/java目录下的java源码编译生成class文件(在target目录下)。

        test:src/main/java目录编译。

        clean:删除target目录,就是把其中的class文件删除。

        package:生成jar压缩文件,放在target目录下。

        install:将压缩文件(jar)上传到本地仓库。

        deploy:将压缩文件上传到内部仓库。


        以上就是我对于Maven框架的总结,不是很详细,以后我会有所补充。


猜你喜欢

转载自blog.csdn.net/qq_38449518/article/details/80913106