vlambda博客
学习文章列表

三十、Maven【跟我学编程】

在前面做示例项目的时候,我们用到了Gson,用于实现实体类转Json字符串的操作,在导入Gson包的时候,在idea中选择的是:From Maven。


那么Maven是什么呢?即对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Mave是一个软件,用于对项目进行管理,包括了构建、编译、打包等。主要解决的问题就是将项目中所用到的各种依赖包极其关系管理起来,然后方便用户进行编译打包及管理。


总结一句话就是用Maven来管理我们正在做的项目,会更加简单、更加方便一些。


有一点需要了解的是:Java的技术路径和.Net技术路径略有不同。Java从出身之日起,就是面向web的。且Java的发展一直得到了开源组织的大力支持,而.Net则是闭源的。


微软最初的VS是致力于winform研发的,VS6以前,主要的工具VC++、VB,VC++致力于系统软件的研发,VB则致力于winform的开发,在Web方面是ASP。插一句,微软的发展有两大败笔:web落后及手机落后,尤其手机,简直是无法理解。想想十几年前的智能手机,基本上是WindowsMobile一统天下,当然还有塞班。这个不多讲了,有兴趣的可以自行了解。


但Java出现后,及PHP的流行,对微软的影响极大。所以,微软为了解决在Web开发方面的短板,及开发语言的短板(VC++太难了,VB不是一个面向对象的语言,且功能较弱,在做进一步深入开发时,往往需要借助VC的能力,且无法进行Web开发),所以就搞了一个C#出来,同时又搞出一个ASP.Net,作为ASP的升级版本。


C#的诞生比Java晚,所以,C#在语法方面也做到了比Java更加的优秀。但还是那句话,微软一直处于闭源的的状态,且无法跨平台。微软宣称的.Net跨平台,依然是在Win系列中进行,现在微软的新的技术体系应该是支持Linux了,但笔者没有尝试过。


虽然Java也没有完全开源,但其跨平台的优势极为明细那。从整套技术解决方案来看Java更加有优势:Linux+Tomcat+MySql+Eclipse,一套免费的解决方案。Windows+IIS+SqlServer+VS,一套收费极其昂贵的方案。加之那几年互联网的快速发展,对于中小企业,这个成本是很难承受的,所以免费的方案则更加适用,也正是互联网的快速发展,也造就了Java方面的快速发展。但遗憾的是:SUN倒掉了。虽然现在.Net也开始开源了,但还是略微慢点。


从这个发展来看,实际很多内容都可以解释。最好用的IDE为何是Visual Studio,因为这是收费的,且发展历史悠久,且有微软强大的后台支撑着。为何C#入门更加的容易,Java反而会有些难度。为何Java体系下技术点非常多,而.Net下却比较单一且简单。这都是发展过程中所决定的。也许这话有些绝对,请不要挑错。


在.Net平台下,类似刚才所说的项目管理都有VS来处理,作过.Net的人员都了解,这个并不复杂,且用的也还算顺手,所以,类似Maven这样的东西也不会存在了(这点不准确,好像Maven在.Net下也有解决方案了),同时Java有什么新的内容,.Net都会进行跟进,譬如:提供了Nuget。


好了,现在我们需要将我们的项目改造成Maven项目。


打开项目之后,在左侧,选中项目,鼠标右键:Add Framework Support,在打开的新窗口中,选择“Maven”,点击“OK”。


完成后,您会发现在您的项目中自动增加了一个pom.xml文件。好好说说pom.xml。


什么是pom.xml。

POM全称为:Project Oject Model。在Maven项目中以XML文件形式存在,即pom.xml,在此文件中包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。也就是说。pom.xml就是项目的配置文件。


所以,在此我们知道了,pom.xml实际就是maven项目的核心内容,有关pom的配置及标签含义,英文好的可以参见:http://maven.apache.org/pom.html

英文不好的,看下面的说明:


以下内容摘自于:https://blog.csdn.net/qq_33363618/article/details/79438044,大家也可移步到此查看详细的内容:

以下截取了部分内容,但足以说明问题。笔者就不再做总结了。


<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  

  

    <!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 -->  

    <modelVersion>4.0.0</modelVersion>  

  

    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->  

    <groupId>com.winner.trade</groupId>  

  

    <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->  

    <artifactId>trade-core</artifactId>  

  

    <!-- 本项目目前所处的版本号 -->  

    <version>1.0.0-SNAPSHOT</version>  

  

    <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->  

    <packaging>jar</packaging>  

  

    <!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件 不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->  

    <classifier>...</classifier>  

  

    <!-- 定义本项目的依赖关系 -->  

    <dependencies>  

  

        <!-- 每个dependency都对应这一个jar包 -->  

        <dependency>  

  

            <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),-->   

            <!--就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->  

            <groupId>com.winner.trade</groupId>  

            <artifactId>trade-test</artifactId>  

            <version>1.0.0-SNAPSHOT</version>  

  

            <!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。-->  

            <!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->  

            <scope>test</scope>  

  

            <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似  -->  

            <optional>false</optional>  

  

            <!-- 屏蔽依赖关系。比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->  

            <exclusions>  

                <exclusion>  

                    <groupId>org.slf4j</groupId>  

                    <artifactId>slf4j-api</artifactId>  

                </exclusion>  

            </exclusions>  

  

        </dependency>  

  

    </dependencies>  

  

    <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->  

    <properties>  

        <file.encoding>UTF-8</file.encoding>  

        <java.source.version>1.5</java.source.version>  

        <java.target.version>1.5</java.target.version>  

    </properties>  

  


</project>  


pom.xml可以说是Maven的核心内容,大家要掌握其基本的配置,主要是包引用的问题。


我们将我们当前的项目修改为Maven项目,然后继续。