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

 

posted @ 2015-08-24 17:51  predisw  阅读(197)  评论(0编辑  收藏  举报