Maven 配置篇

Maven构建工具的配置说明, 包括全局配置以及pom配置, 了解maven各个配置标签的作用, 以及配置作用域

----环境变量篇----

环境变量(mac)

windows环境变量与下面一致, 只不过形式上有些出入

MAVEN_HOME=/Users/medness/work/apache-maven-x.x.x
export MAVEN_HOME
export PATH=${MAVEN_HOME}/bin:$PATH

maven环境中, 配置的优先级

pom.xml > user settings > setting.xml 如果同时存在, 取并集, 并按优先级覆盖ID相同的配置(就近原则)

maven工程之间可以形成依赖关系, 且依赖关系自上向下传递, 类似java的继承, 父节点有的特性, 如果在子节点中pom中没被重写, 则子节点继承父节点的特性

setting.xml中的标签说明

localRepository:

maven本地仓库盘符, maven在构建的时候, 会优先到当前电脑的指定仓库位置去寻找声明的依赖信息

/Users/medness/work/MavenRepository/repos

pluginGroups:

当我们使用插件的时候, 如果插件的groupId没有被显式的声明, 那么maven会默认使用当前标签内的配置信息, 当做当前使用插件的groupId


  
  com.gomyck

proxies

maven网络代理, 不多说

servers

这个标签是一个辅助标签, 有时候远程仓库需要用户名密码来download||deploy, 使用这个标签来记录远程仓库的账号密码, id是记录仓库的唯一标识, 是不允许重复的.


    gomyck-repo-releases
    xxxx
    xxxxxxx

mirrors

镜像标签, 用来指定声明的仓库资源位置在哪里, 比如maven的central仓库, 原本的地址为: http://repo.maven.apache.org/maven2/, 我们可以通过镜像标签来改变这个中央仓库的资源位置到国内淘宝, 加快依赖下载速度


  central-repo
  maven central repo
  https://maven.aliyun.com/repository/central
  central

profiles

这个标签跟pom中的意思一样, 但是它是片段化的, 没有pom文件中的profile子标签类型多, 因为其在setting中代表的是全局的profile, 所以只保留了通用的标签,
我通常使用这个标签来设置仓库的使用, 下面简单说下其他子标签的作用

profile配置好之后, 如果使用eclipse, 则在当前工程根目录右键, 点击maven> select maven profile> 选择配置好的profile, 如果使用IDEA, 那么在右侧, 点击maven侧边栏, 在弹出的面板最上面, 会有profiles的下拉列表, 勾选要使用的profile即可


  
      gomyck-repo-ali-all
      
      
          
      
      
      
      
          
              gomyck-repo-releases
              https://repo.rdc.aliyun.com/repository/17470-release-K5GxQ2/
          
          
              gomyck-repo-snapshots
              https://repo.rdc.aliyun.com/repository/17470-snapshot-JPWNMN/
              
                  
                  true
                  
                  always
            
          
      
  

profile中激活条件标签(activation)说明:



    
    false
    
    !1.5
    
        
        Windows XP
        
        Windows
        
        x86
        
        5.1.2600
    
    
    
        
        mavenVersion
        
        2.0.3
    
    
    
        
        ${basedir}/file2.properties
        
        ${basedir}/file1.properties
    

profile可以设置默认激活, 且不写ID的时候, 就会全局激活该配置, 而且IDEA的profiles列表是看不到这个配置的

ActiveProfiles

激活的profile列表


  
  gomyck-repo-ali-all

Offline

构建时是否为离线模式, 当网络不好时, 构建非常缓慢, 可设置该属性为true, 使用本地仓库加快构建速度

setting.xml一次设置, 终身使用, 所以在配置改文件时, 要保证通用性, 易用性, 并且涉及到账号密码的setting文件, 最好不要提供给他人复用, 以免敏感信息泄露

pom.xml的使用

pom文件是标识当前工程为maven工程的声明文件, maven通过该文件来对以其为相对根目录的工程文件进行相应的构建操作, 如用CPU 硬盘 内存等信息描述一台计算机的构成一样, pom文件 中的标签也在用类似的方式描述当前工程的构成, 以及构建细节, 通过其内的标签, 来描述当前工程的基本信息, 属性, 依赖信息, 构建信息, 部署信息....

如何描述当前的maven工程

使用groupId, artifactId, version三个基本标签来描述当前maven工程, 通常是这样的:

com.gomyck
demo
0.0.1-SNAPSHOT

以上三个顶级标签, 声明了当前工程的基本信息, groupId一般情况下, 都使用你的域名倒叙, artifactId用来描述当前工程的应用信息 通过上述三个标签, 确定了当前工程全球唯一性, 当然, 还有一些辅助标签, 用来对其补充额外的基本信息, 比如作者信息等

pom.xml中的标签说明




    org.springframework.boot
    spring-boot-starter-parent
    2.1.3.RELEASE


com.gomyck
fastdfs
0.0.1-SNAPSHOT

jar


fastdfs



    2.1.3.RELEASE
    Greenwich.SR2




    
        org.springframework.boot
        spring-boot-starter-websocket
    
    
        org.springframework.boot
        spring-boot-starter-cache
    




    
    ${project.name}
    
        
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    




    
        spring-milestones
        Spring Milestones
        https://repo.spring.io/milestone
        
            false
        
    




    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
    




    
    
        
        holystar-dependence
        http://xxx.xxx.xxx.xxx:xxxx/repository/xxxxx/
    
    
        holystar-dependence
        http://xxx.xxx.xxx.xxx:xxxx/repository/xxxxx/
    




    gomyck-config
    gomyck-fastdfs

----其他知识点----

华为终于官宣了其自研的鸿蒙OS, 并称其为微内核全场景分布式AI...架构, 不好意思, 我有点醉了

分不清到底是一堆营销词还是真的有那么夸张, 毕竟把时下最流行的词都揉到一起念了出来, 肺活量小的人还真做不到.

以下属于个人理解:

关于微内核的定义: 剔除宏内核臃肿的内核组件, 仅保留最基本的系统服务, 比如线程, 任务, 进程通信(IPC), 内存管理等, 原来宏内核中的驱动, 文件管理, IO, 网络服务等, 统统排出到内核外, 以模块形式实现

优点:

  1. 服务模块化, 因为微内核只提供最基本的服务, 剩下的都属于应用层, 所以只要厂商做适配, 那么所有设备都可以兼容微内核, 所有设备都可以选择性的做模块化适配

  2. 安全, 微内核代码只有几万行, 且是可以用数学验证其是free bug的, 所以微内核在汽车嵌入式领域, 航天, 医疗方面使用时非常广泛的, 举个例子, 为什么说黑莓手机非常安全, 因为早些年黑莓手机使用的就是微内核系统, QNX (发布会说鸿蒙OS有优秀的安全性, 没明白是在哪方面安全, 是网络安全, 还是数据安全, 还是没有后门)

  3. 兼容, 能使不同的操作特性的系统在一个系统中共存, 因为基础服务都是模块, 当然想怎么玩就怎么玩

缺点:

  1. 进程之间的消息传递, 正是因为所有服务都被独立分配内存, 模块化, 导致进程之间的通信开销变的非常大

  2. 服务间接口设计, 模块化带来两个服务之间复杂接口的定义变得异常困难

  3. 最重要一点, 生态, 微内核是学术界的宠儿, 但并不代表是业界的宠儿(工业界), 情怀虽然可以有, 但是投入巨大的成本去适配一个后起之秀, 任何企业都会三思后行, 任何时候, 生态最终会决定一个技术产物的兴衰, 至少工业界如此, 没有厂商为你做兼容, 驱动, 没有客户买单, 再好的东西都是死路一条, 个人或者小群体的努力, 并不能左右世界的浪潮

总结:

如果是为了提高销量或者利益相关来刺激国民G点, 那一年半载即可见分晓, 如果是真正干事的话, 华为确实是走在国内厂商头前的超级英雄

BUT: talk is cheap, show me the code!

个人博客 点击前往

你可能感兴趣的:(Maven 配置篇)