maven pom.xml 标签详解:http://blog.csdn.net/sunzhenhua0608/article/details/32938533
Maven多模块项目管理小结:http://blog.csdn.net/whuslei/article/details/7989102
尚硅谷视频笔记
maven核心:
1》约定的目录结构 2》POM 3》坐标 4》依赖管理 5》仓库管理 6》生命周期 7》插件和目标 8》继承 9》聚合
结构:
hello:根目录,工程名
——src:源码
————main:主程序
——————java:java源文件
————————resources:框架或者其他工具的配置文件
————test:测试主程序
——————java
————————resources
——pom.xml:Maven核心配置文件
常用命令
mvn clean:清理
mvn compile:编译
mvntest-compile:测试编译
mvntest:测试
mvnpackage:打包(把jar打到本项目的target下)
mvn install:安装(把打出的包装载到本地仓库)
mvn site:生成站点
坐标:Maven使用三个向量在仓库中唯一定位一个Maven工程
<groupid>com.baidu.maven</groupid>
<artifactid>TestMaven</artifactid>
<version>1.0.0</version>
<packaging>jar</packaging>
groupid:公司或组织域名的倒叙+项目名
artifactid:模块名
version:版本
packaging:打包方式:也可以不写,但创建时肯定需要指定
Maven工程与仓库路径的对应关系
com/baidu.maven/TestMaven/1.0.0
仓库:
本地仓库:当前电脑上的仓库。
私服:搭建在局域网中,Nexus。
中央仓库:为全世界服务。
镜像库:为亚洲服务,加快访问速度。
依赖:
<dependency>
<groupid>com.baidu.maven</groupid>
<artifactid>TestMaven</artifactid>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
maven解析依赖信息时,会去本地仓库找依赖的jar包。
我们自己开发的maven工程,使用install命令即可安装到本地库
Maven依赖范围及依赖传递 http://www.cnblogs.com/beenupper/p/3344208.html
依赖域:scop 依赖范围就是控制在编译,测试,运行时的classpath的关系
compile:编译依赖范围。编译,测试,运行都需要 如spring-core (不填 默认是这个)
test:测试依赖范围。不参与编译和运行,仅测试需要 如junit
runtime: 运行时依赖范围。不参与编译,测试、运行时需要。如JDBC驱动包
provided:已提供依赖范围。编译、测试需要,不参与运行 如servlet-api、jsp-api(tomcat等容器自带,使用不当会造成编译冲突)
import: 继承当前依赖中的全部依赖,或者说 解决了 maven中的 单继承问题http://blog.csdn.net/u011686226/article/details/60469057
system:系统依赖范围。本地仓库依赖,不在maven中央仓库(不推荐使用) 参考自:http://www.cnblogs.com/beenupper/p/3344208.html
eclipse中使用maven:
1修改成自行解压安装的maven. 在eclipse的Preferences-Maven-Installations 选择
2指定user settings:conf/settings.xml文件 方便修改本地库的位置。
3默认创建的maven项目使用的jre是偏低的版本
打开settings.xml文件,找到profiles标签
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
创建maven工程步骤:New--New Maven Project--勾选Create a simple project(skip archetype selection)--填写Group Id、Artifact Id、Packageing(默认jar)
区分web工程的地方:创建时选择打包方式:war
项目属性:找到Project Facets--Dynamic Web Module 2.5(取消勾选 再选中,等于转换成了web工程)
pom.xml错误:An error occurred while filtering resources。确保xml文件中其他错误被修正时,可以使用 mvn -clean 清除掉项目上的×
导入手动建立的Maven:Import -- Existing Maven Projects--选择文件夹 --Finish即可
导入其他项目为依赖,编译之前需要先进行安装
<dependency>
<groupId>com.baidu.maven</groupId>
<artifactId>TestMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
依赖的传递:最底层的被依赖项目中的pom所需要的jar包,如果设定域为:compile会传递,test本包可用,provided本包可用
依赖的排除:从当前项目开始生效,后续项目如果依赖当前项目,排除都有效。
<exclusions>
<exclusion>
<groupId>com.baidu.maven</groupId>
<artifactId>TestMaven</artifactId>
</exclusion>
</exclusions>
依赖的原则:多个依赖版本不同时,路径最短者优先,取最近的项目依赖的版本
如: a->b->c1.1 和 d->c1.0 , 项目中同时倒入a,d包, 则优先使用C1.0版本
路径相同时:如两个项目同时依赖进来,先声明者优先,指的是dependency的顺序
统一管理依赖的版本:
properties标签内使用自定义标签统一声明版本号,在需要统一版本的位置,使用${自定义标签名}
<properties>
<baidu.spring.version>4.0.0</baidu.spring.version>
</properties>
<properties>标签还可以用作别的声明,不仅仅是版本号。
继承:
方便统一管理各个模块工程中的依赖,将所有依赖提取到”父“工程中,在子工程中依赖时不指定版本。
步骤
1》创建一个Maven工程作为父工程。注意:打包的方式pom
2》在子工程中声明对父工程的引用
3》将子工程的坐标与父工程坐标中重复的内容删除
4》在父工程中同意一路的版本
5》在子工程中删除依赖的版本号部分
<parent>
<groupId>com.baidu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准查找父工程中pom.xml文件的相对路径 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
父工程中<dependencyManagement>标签下配置要统一的依赖<dependencys>...</dependencys>
具体可以自学百度 dependencyManagement和dependencys的区别
聚合:
多个项目需要一个一个安装,单个项目安装时需要先安装父工程
作用:一键安装各个模块工程。
<modules>
<module>../TestMaven(也可以填写工程pom文件中的artifactId)</module>
</modules>
以后只要操作该聚合项目即可
Web工程自动部署
deploy:将最终的包赋值到远程库,让其他开发人员和项目共享,或者部署到服务器上运行。
不常用,配置如下:
<build>
<finalName>AtguiguWeb</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.2.3</version>
<configuration>
<container>
<containerId>tomcat6x</containerId>
<home>D:\DevInstall\apache-tomcat-6.0.39</home>
</container>
<configuration>
<type>existing</type>
<home>D:\DevInstall\apache-tomcat-6.0.39</home>
<!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
<properties>
<cargo.servlet.port>8989</cargo.servlet.port>
</properties>
</configuration>
</configuration>
<executions>
<execution>
<id>cargo-run</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
查找依赖信息的网站:
http://mvnrepository.com
http://maven.outofmemory.cn/
pom.xml文件举例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.maven.web</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<properties>
<test.spring.version>4.0.0</test.spring.version>
</properties>
</project>