1 maven的安装与配置
1.1 maven的安装
A:解压压缩包到某一目录中。
B:配置环境变量
M2_HOME:D:\apache-maven-3.2.5(类似Java_Home)
path:加入D:\apache-maven-3.2.5\bin
C:cmd窗口:输出mvn -v:如果有提示信息,表示安装成功。
更改Maven的本地仓库的路径
bin
conf目录:setting.xml:Maven的配置文件。
A:更改Maven的本地仓库的路径:
Maven缺省的本地仓库路径为${user.home}/.m2/repository。
可以通过修改${user.home}/.m2/settings.xml配置本地仓库路径
Xml代码
<settings>
<localRepository>D:\java\repository</localRepository>
</settings>
1.2 约定大于配置。(目录结构)
Maven提倡“约定优于配置”(Convention Over Configuration),
这是 Maven最核心的设计理念之一。
原因之一就是使用约定可以大量减少配置。
a)源码目录为 src/main/java/
b)源码资源目录为 src/main/resources/
c)测试目录为 src/test/java/
d)测试资源目录为 src/test/resources/
e)编译输出目录为 target/classes/
f)打包方式为 jar/war
g)包输出目录为 target/
h)超级 pom
超级 pom 定义以上的目录结构、核心插件设定版本。Maven 设定核心插件的原因,
是防止由于插件版本的变化而造成构建的不稳定。
遵循约定虽然损失了一定的灵活性,用户不能随意安排目录结构,但是却能减少配置。
更重要的是,遵循约定能够帮用户遵循构建标准。个性往往意味着牺牲通用性,
意味着增加无谓的复杂度。
2 maven与IDE结合:
2.1 maven与myeclipse2014创建一个简单的maven工程。
A:更改MyElipse的默认Maven。Window---->Preferences---->MyEclipse---->Maven4MyEclipse--->Installations
B:更改MyElipse的默认Maven。Window---->Preferences---->MyEclipse---->Maven4MyEclipse--->Installations:更改为Maven目录的settting.xml的路径。
C:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse中的jdk路径。
工程目录(main中的java/resource与test中的java/resource是源文件夹,不是文件夹。)
src
main
java: 放java的源文件
resources 放配置文件。
webapp
WEB-INF
web.xml
test
java 放测试javar的源文件
resources 放测试的的配置文件。
pom.xml 工程模型配置文件。
target
classes
pom.xml
坐标定义:
<groupId>com.dfrz</groupId> G 公司或者组的定义。
<artifactId>Maven_01</artifactId> A 项目或者模块名称定义
<version>0.0.1-SNAPSHOT</version> V: 版本定义
GAV:坐标
SNAPSHOT--->Alpha--->Beta--->Release----GA
SNAPSHOT:内部开发版本
Alpha: 内部公测版本
Beta: 对外公开的测试版本
Release:可以使用的版本
GA: 稳定版本
<packaging>jar</packaging> 运行maven的package命令时,该工程会打包为一个java
maven中通过GAV形成坐标。
//Maven工程中的依赖:从本地仓库中寻找。如果本地仓库中寻找不到,再找网络仓库(中央仓库)中寻找。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
与
2.2 maven与intellijidea结合
http://blog.csdn.net/zht666/article/details/8673609/
idea设置默认maven配置
2.3 scope取值
maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,
所以maven中的依赖关系有作用域(scope)的限制。在maven中,scope包含如下的取值:
compile(编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。
编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围)
provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。
例如,如果你开发了一个web应用,
你可能在编译classpath中需要可用 的Servlet API来编译一个servlet,
但是你不会想要在打包好的WAR中包含这个Servlet API;
这个Servlet API JAR由你的应用服务器或者servlet容器提供。
已提供范围的依赖在编译classpath(不是运行时)可用。
它们不是传递性的,也不会被打包。
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。
比如,你可能在编译的时候只需要JDBC API JAR,
而只有在运行的时候才需要JDBC驱动实现。
test(测试范围)
test范围依赖在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
测试范围依赖在之前的中介绍过。
2.4 使用dependency来下载中央仓库中存在的jar
2.5 中央仓库中不存在的jar,可以通过手工安装到本地仓库,然后再进行引用。
A:纯手工安装:
按照GAV的方式在仓库中建立对应的文件夹。
jar文件的命名:A-V.jar
B:使用命令安装。
mvninstall:install-file -Dfile=G:\SoftWare\DataBase_Lib\oracle10G的驱动\ojdbc6_11.2.0.3.0.jar -DgroupId=com.driver -DartifactId=oracle-Dversion=11.2 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
2.6 maven对于工程的命令的操作。
compile
package:对工程打包。默认存放工程的taget目录下。
install:将jar安装到本地仓库中。
命令可以组合一起使用 package install
2.7 工程中间Jar的引用
工程不同版本的引用
使用GVA来引用工程。/通过版本的控制
自动判断
不同深度:路径优先级
A---->B---->C(1.2.7)
D---->C(1.2.15)
选1.2.15版本,路径短
相同深度:按依赖的先后顺序
A--->C(1.2.7)
B--->C(1.2.15)
选1.2.7
B--->C(1.2.15)
A--->C(1.2.7)
选1.2.15
手工判断
A:排除依赖管理
<dependency>
<groupId>com.test</groupId>
<artifactId>maven_02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
C:在pom.xml中指定具体引用的版本。
3 maven中的仓库
中央仓库:maven官方维护的仓库,提供通用的jar与插件下载
默认中央仓库的位置:\maven-3.2.5\lib\maven-model-builder-3.2.5.jar中的pom-4.0.0.xml文件中
在工程中更改中央仓库的位置:
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test_02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>test_02</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>JBossRepository</id>
<url>
http://repository.jboss.com/maven2/
</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>JBossRepository</id>
<name>ApacheSnapshots</name>
<url>
http://repository.jboss.com/maven2/
</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
</project>
如果多个工程需要同时设置:setting.xml中配置中央仓库:
<profiles>
<profile>
<id>test_xuewei_profile</id>
<repositories>
<repository> //配置仓库
<id>nexus</id>
<name>Nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository> //配置插件仓库
<id>nexus</id>
<name>Nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>test_xuewei_profile</activeProfile> //激活设置。
</activeProfiles>
本地仓库:
4 插件
Maven中所有的功能都是由插件来完成的。
默认插件的目录:\Maven_Repository\org\apache\maven\plugins
常用的插件:
4.1 javadoc插件(生成JavaDoc文档)
javadoc:javadoc
javadoc:jar
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration>
<!--这边指定的编码与工程的编码一致 -->
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
</configuration>
<!--将插件的运用绑定到生命周期中 -->
<executions>
<execution>
<id>createjavadoc</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
<goal>javadoc</goal>
</goals>
</execution>
</executions>
</plugin>
4.2 Source插件(用来将工程打包成带源代码的jar包)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
4.3 RAR插件(生成rar文件)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-rar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeJar>true</includeJar>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>rar</goal>
</goals>
</execution>
</executions>
</plugin>
4.4 将工程的jar包拷到lib目录中。(在部署项目时用)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>
true
</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeScope>system</excludeScope>
<excludeArtifactIds>
jstl,jsp-api
</excludeArtifactIds>
<excludeGroupIds>
jstl,javax.servlet
</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
4.5 main插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.util.DateUtil</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
4.6 jetty插件(开发时不用频繁重启服务器)
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.5</version>
<configuration>
<webAppSourceDirectory>
WebRoot
</webAppSourceDirectory>
<scanIntervalSeconds>5</scanIntervalSeconds>
<connectors>
<connector
implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8081</port>
</connector>
</connectors>
</configuration>
</plugin>
4.7 tomcat插件(可以远程部署tomcat)
4.7.1 user.xml中配置
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<rolerolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin-gui"/>
<user username="tomcat"password="tomcat"
roles="tomcat,manager,manager-gui,manager-script,admin-gui"/>
</tomcat-users>
4.7.2 setting.xml中配置
<servers>
<server>
<id>Tomcat6_Server</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
</servers>
4.7.3 pom.xml中配置
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<url>http://127.0.0.1:8080/manager</url>
<!--server的名称要与settting.xml中定义的server中的ID一致。 -->
<server>Tomcat6_Server</server>
<ignorePackaging>true</ignorePackaging>
</configuration>
</plugin> 执行部署:
cleantomcat:redeploy
4.8 运行插件
先选择插件,然后运行
5 maven中的聚合
Mavne的聚合就是将多个Maven工程合并在一起编译与打包
新建一个Maven_total的工程,只需要编辑pom.xml文件。
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>maven_total</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<build/>
<modules>
<module>../maven_01</module>
<module>../maven_02</module>
<module>../maven_03</module>
<module>../maven_04</module>
<module>../maven_hibernate</module>
</modules>
</project>
6 maven中的继承
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ecan</groupId>
<artifactId>project_03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
<version>2.5</version>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<url>http://localhost:8083/manager</url>
<server>Tomcat6_Server</server>
<ignorePackaging>true</ignorePackaging>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!--依赖的定义 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.29</version>
<exclusions>
<exclusion>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子工程:
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.ecan</groupId>
<artifactId>project_03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ecan</groupId>
<artifactId>project_04</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>