Maven学习笔记

Maven是基于项目对象模型(pom),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。可以帮助我们更有效的管理项目,
是一套强大的自动化的管理工具,覆盖了编译、测试、运行、清理、打包,整个项目构建周期

bin目录包含mvn的运行脚本
boot目录包含一个类加载器的框架
conf是配置文件目录


Maven项目的目录结构
src
    -main
        -java
        -package
    -test
        -java
        -package
    resources

pom.xml
<groupId>项目的包名</groupId>
<artifactId>模块名(建议用“项目名-model”进行标识)</artifactId>
<version>0.0.1SNAPSHOT</version>


cmd命令:mvn -v        查看maven版本
         compile   编译
         test      测试
         package   打包
         clean     删除target
         install   安装jar包到本地仓库中

archetype插件 用于创建符合maven规定的目录骨架
使用方法cmd命令:  第一种: mvn archetype:generate
           第二种: mvn archetype:generate -DgroupId=com.lc.maven04(组织名,公司网址的反写+项目名) -DartifactId=maven04-demo(项目名-模块名) -Dversion=1.0.0SNAPSHOT(版本号) -Dpackage=com.lc.maven04.demo(代码所存在的包名)


在maven世界中任何一个依赖、插件、项目构建的输出都称之为构件,所有构件均通过唯一坐标作为其标识
坐标
    构件
仓库
    本地仓库和远程仓库(在maven\lib\maven-model-builder.jar中有一个pom-4.0.0.xml文件,有一个全球中央仓库的链接,它封装了大部分开发所需要的jar包)
镜像仓库:修改位置maven\conf\settings.xml 查找mirrors
    <mirror>
      
      <id>maven.net.cn</id>
      
      <mirrorOf>central</mirrorOf>
      
      <name>central mirror in china</name>
      
      <url>http://maven.net.cn/content/groups/public</url>
    
    </mirror>
更改仓库位置
    默认的仓库位置是在当前用户的目录中的C:\Users\Think\.m2\repository   若重装系统就没有了
    更改方法:找到maven目录下的settings.xml <localRepository>D:/workspace/repo</localRepository>


Eclipse安装Maven插件: 将插件解压后复制到Eclipse目录中的dropins目录下
                       若eclipse配置的是jre而不是jdk那么需要添加jdk
                       进入eclipse目录下的eclipse.ini配置文件添加: -vm
                                    D:\Program Files\Java\jdk1.8.0_144\bin\javaw.exe
                       然后将eclipse中的默认jre修改为jdk
完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署
maven生命周期:clean   清理项目         分为 pre-clean(执行清理前的工作)、clean(清理上一次构建生成的所有文件)、post-clean(执行清理后的文件)
               default 构建项目(最核心) 分为 compile、test、package、install
               site    生成项目站点     分为pre-site(在生成项目站点前工作)、site(生成项目站点文档)、post-site(在生成项目站点后工作)、site-deploy(发布生成的站点到服务器上)

注意:Maven项目和我们的实际项目不是一一对应关系,Maven项目体现的是模块化的概念,因此一个实际的项目往往会被划分成很多的模块

pom.xml常用元素介绍:
    project 是pom.xml的根元素 包含了pom的一些约束信息
    modelVersion是一个固定的版本 必需的元素 指定了当前pom的版本
    坐标的信息:<groupId>主项目的标识(反写的公司网址+项目名)</groupId>
            <artifactId>模块的标识(项目名+模块名)</artifactId>
        <!-- 第一个0表示大版本号 第二个0表示分支版本号 第三个0表示小版本号 -->
        0.0.1
        snapshot快照
        alpha内部测试
        beta公测
        Release稳定
        GA正式发布
        <version>当前项目的版本号</version>
        <!-- 默认是jar 还有war zip pom -->
        <packaging></packaging>
        <!--项目描述名,一般是产生项目文档时才产生-->
        <name></name>
        <!--项目地址-->
        <url></url>
        <!--项目描述-->
        <description></description>
        <!--开发人员列表-->
        <developers></developers>
        <!--许可证的信息-->
        <licenses></licenses>
        <!--组织信息-->
        <organization></organization>
        
        <!--依赖列表-->
        <dependencies>
            <!--依赖项-->
            <dependency>
                <groupId></groupId>
                    <artifactId></artifactId>
                    <version></version>
                    <type></type>
             <!--依赖范围-->
                    <scope></scope>
            <!--设置依赖是否可选 true false 默认是false-->
            <optional></optional>
             <!--排除依赖传递列表-->
            <exclusions>
                <exclusion>
                </exclusion>
            </exclusions>
            </dependency>
        </dependencies>
        <!--依赖的管理--> 不会被运行,不会被引入到实际的以来中,主要写在父类模块,由子类模块继承用的
        <dependencyManagement>
            <dependencies>
                <dependency>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <!--为构建行为提供相应的支持-->
        <build>
            <!--插件列表-->
            <plugins>
                <plugin>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
                </plugin>
            </plugins>
        </build>
        <!--通常用于子模块中对父模块的继承-->
        <parent></parent>
        <!--聚合运行多个的Maven项目-->
        <modules>
            <module></module>
        </modules>


依赖范围<scope></scope>
Maven提供了三种classpath :编译、测试、运行
<scope>compile</scope>默认的范围 编译、测试、运行 都有效
<scope>provided</scope> 编译、测试  有效
<scope>runtime</scope> 测试、运行  有效
<scope>test</scope> 测试  有效
<scope>system</scope> 编译、测试  有效不可移植
<scope>import</scope>只用于<dependencyManagement>中表示从其它的pom中导入dependecy的配置

依赖传递
      依赖具有传递性
依赖冲突
原则:1.短路优先
       A->B->C->X(JAR)
       A->D->X(JAR)
      2.先声明先优先
    如果路径长度相同,则谁先声明,先解析谁

聚合和继承
    聚合:新建maven项目将pom文件中的packaging标签改为pom
          然后添加<modules>
            <module></module>
              </modules>
        继承:新建maven项目将pom文件中的packaging标签改为pom
        <dependencyManagement>要继承的依赖</dependencyManagement>
        子项目的pom中<parent>父类项目的坐标</parent>
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值