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.更深入的学习请参看: