• maven 学习


    1.mvn install 和mvn install:install 是不一样的.

      mvn install 中的install 是一个生命周期lifecycle,install:install 一个插件goal.在生命周期中做了很多个goal ,最后写入本地库.

    2.在编译阶段加入jre中的rt.jar,但是不会打包到项目中.

     <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.3</version>
              <configuration>
                <source>7</source>
                <target>7</target>
                <compilerArguments>
                     <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
                </compilerArguments>
              </configuration>
    
            </plugin>

    上面的指定了使用3.3版本的compile 插件,和配置使用 java 7 的javac 来编译.如果要添加多个jdk 包,在linux 中用:分开,windows 中用; 分开.

    3.多模块的项目中,如果不在父项目中mvn install,那么有依赖的子模块之间一开始并不能编译和打包.例如 a,b,c 3个模块,a 依赖b,b 依赖c.c 可以打包和安装到本地库.但是b打不了包,因为b 依赖c 却不能在本地库中找到c,不知为何.但是如果在父项目中mvn install 一次,也就是说把所有的子项目都安装一次到本地库之后,就可以独立进子模块项目来独立打包,安装之类的了.对于这个问题,不知为何....

     4.groupId:组id,可以包含很多项目id.就是多个项目可以有一样的组id.表明这些项目都属于同一个组,可以共享同一个父pom.xml 的资源

     artifactId:项目id.

    下面是一个多模块项目的父pom.xml.

      <groupId>com.predisw.skyline</groupId>
      <artifactId>sklineTest</artifactId>
      <packaging>pom</packaging>
      <version>1.0</version>
      <name>skylineTest</name>
    
      <modules>  
        <module>util</module>
        <module>dao</module>
        <module>service</module>
        <module>action</module> 
      </modules>  

    解析:这个是一个  com.predisw.skyline 组中的名为skylineTest 的项目,这个项目下有4个子模块(项目).目录结构图如下:

    |--pom.xml
    |--util
        |--pom.xml
    |--dao
        |--pom.xml
    |--service
        |--pom.xml
    |--action
        |--pom.xml

    下面是 dao 的pom.xml

      <parent>
        <groupId>com.predisw.skyline</groupId>
        <artifactId>skylineTest</artifactId>
        <version>1.0</version>
      </parent>
     
        <artifactId>skylineTest-dao</artifactId>
        <packaging>jar</packaging>
    
        <dependencies>
          <dependency>
            <groupId>com.predisw.skyline</groupId>
            <artifactId>predisw-util</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>

    解析:子目录dao 下的子项目的名称是 skylineTest-dao,这个和目录名是可以不一样的.就是说项目的名称可以和包含它的目录不一样.父pom.xml 的module 中的dao 是相对于父pom.xml 的位置来说的一个相对目录.

    下面是dao 子项目的完整路径.

    解析:可以看出dao 子项目的 包 是com.skyline.dao 和com.skyline.pojo 和项目组 的com.predisw.skyline 是不一样的.

    说明项目组id 和和组里的项目的包是没什么关联的.  

    5.why 什么maven 通过groupId,artifactId,version 就可以确定一个项目了呢?

      因为maven 的都是通过去库查找有没有这个项目的.项目在库中保存的格式就是:groupId/artifactId/version/文件.jar .所以可以通过这个唯一的路径找到.例子如下:

      如上面的com.predisw.skyline:skylineTest-dao:1.0 在库中保存的路径如下:
    .../.m2/repository/com/predisw/skyline/SkylineTest-dao/1.0/SkylineTest-dao-1.0.jar

    6.更深入的学习请参看:

    http://blog.csdn.net/wanghantong/article/details/36427411

  • 相关阅读:
    Mongodb 集群加keyFile认证
    MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
    JVM的垃圾回收机制详解和调优
    深入Java核心 Java内存分配原理精讲
    PLSQL Developer win7 64位 安装方法
    nginx作为负载均衡服务器——测试
    Nginx负载均衡配置
    nginx集群报错“upstream”directive is not allow here 错误
    Nginx反向代理和负载均衡——个人配置
    Quartz集群配置
  • 原文地址:https://www.cnblogs.com/predisw/p/4755459.html
Copyright © 2020-2023  润新知