@TOC
一、Maven介绍
Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的 缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项 目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且 公司项目采用 Maven 的比例在持续增长。
Maven和ANT区别
Ant 是软件构建工具,Maven 的定位是软件项目管理和理解工具。Maven 除了具备 Ant 的功能外,还增加了以下主要的功能:
1)使用 Project Object Model 来对软件项目管理;
2)内置了更多的隐式规则,使得构建文件更加简单;
3)内置依赖管理和 Repository 来实现依赖的管理和统一存储;
4)内置了软件构建的生命周期目前,绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是, Ant 的项目管理工具(作为 make 的替代工具)不能满足绝大多数开发人员的需要。通过检查 Ant 构建文件,很难发现项目的相关性信息和其它信息(如开发人员/拥有者、版本或站 点主页)。
Maven的下载与IDE的整合
下载地址1
Eclipse整合Maven
整合步骤
1、找到该软件的bin目录(最好是硬盘中的根目录)
2、指定Maven配置文件
在User setting中找到maven的setting.xml,点击Update Setting然后apply。注:为了今后方便修改,可以将setting.xml从maven中的conf文中移动到根目录下,如上图。只需要点击 Update Setting即可关联配置文件。
二、Maven仓库与配置
Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全 相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。
对于 Maven 来说,仓库分为两类:本地仓库和远程仓库。
远程仓库
远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.org 和 uk.maven.org 是 Maven 的中央仓库)。其它“远程”仓库可能是你的公司拥有的建立在文件 或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。
本地仓库
本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。
仓库配置
本地仓库配置(setting.xml)
创建一个本地仓库,并指定本地仓库的目录.
镜像仓库配置(setting.xml)
<mirror>
<!-- 指定镜像 ID -->
<id>nexus-aliyun</id>
<!-- 匹配中央仓库。 -->
<mirrorOf>central</mirrorOf>
<!-- 指定镜像名称 -->
<name>Nexus aliyun</name>
<!-- 指定镜像路径 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
仓库优先级问题
本地仓库,镜像仓库,中央仓库。 镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。仓库访问优先级:
1、本地仓库 :第一访问本地仓库。
2、 指定仓库 :第二优先级
3、远程仓库
镜像仓库:镜像仓库是 Maven 开发过程中的首选远程仓库,在本地仓库和指定仓库无法获取资源 的时候,直接访问镜像仓库。
中央仓库:如果镜像仓库不是中央仓库 ,则会在访问镜像仓库无法获取资源后,访问中央仓库。
三、Maven工程的创建
Maven工程的类型
POM工程
POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。
JAR工程
将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。
WAR工程
将会打包成 war,发布在服务器上的工程。如网站或服务。即常见的网络工程 (Dynamic Web Project)。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,,IDE 通常会显示工程错误,需要自行配制缺失目录和文件来解决解决。
创建Maven项目
New--> other -->Maven Project
填写项目信息(点击next以后)
Group Id 公司域名倒写
Artifact Id 项目名
Version 版本名
Packaging 项目类型
Jar java 项目
War : web 项目
POM: 父项目.如果项目有子项目,项目必须是 pom
Name : 自定义名称,内容任意
Description: 描述.详细描述.
Parent Project: 如果当前项目有父项目时填写
四、Maven项目结构
src/main/java : 这个目录下储存 java 源代码
src/main/resources : 储存主要的资源文件。比如spring的xml配置文件和log4j的properties 文件。
src/test/java : 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面
src/test/resources : 储存测试用的资源文件
src : 包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
target : 编译后内容放置的文件夹
pom.xml : 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等 等
工程关系
依赖
即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种 情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系
实例
创建了两个Jar java 类型的项目,主要区别在于他们的pom.xml的配置
被依赖的程序.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.bjsxt</groupId>
<artifactId>Maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
</dependencies>
</project>
依赖的程序.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.bjsxt</groupId>
<artifactId>01MavenDemo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
<dependencies>
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>Maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
依赖的maven程序可以使用被依赖程序所创建的类,可以通过对象的形式直接调用这些类
继承
父工程配置
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.bjsxt</groupId>
<artifactId>03parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<build/>
<properties>
<junit-version>4.3</junit-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子工程配置
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>
<parent>
<groupId>com.bjsxt</groupId>
<artifactId>03parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>04son</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
继承的maven程序可以使用被继承的程序所导入的jar包,并实现版本控制
聚合
创建聚合项目
创建聚合模块
右击聚合项目,点击new->other
项目截图
聚合模块的POM文件
<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.bjsxt</groupId>
<artifactId>04Maven-Manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<build/>
<modules>
<module>04Maven_sub1</module>
<module>04Maven_sub2</module>
</modules>
</project>
创建war类型的项目(web项目)
步骤
1、新建一个maven项目, 工程类型选择为war项目
2、在webapps目录下创建WEB-INF目录
3、在WEB-INF目录下创建web.xml文件,并添加相应代码
4、目项目报错,更新项目(右击项目-》maven-》update project )
Maven : 常见命令
(1) Install命令 :安装项目到本地仓库
(2) Clean命令: 清理maven项目
(3) Compile命令 : 编译源代码
(4) Deploy命令 : 发布项目到远程仓库
(5) Package命令 : maven 打包
更多请见: https://zhuanlan.zhihu.com/p/29208926
五、Maven常见的插件
1、编译器插件(动态配置jdk)
pom.xml配置片段
一次配置,一次生效
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
在setting.xml配置全局编译器插件
一次配置,一直生效
<profile>
<!-- 定义的编译器插件 ID,全局唯一 -->
<id>jdk-1.7</id>
<!-- 插件标记,activeByDefault 默认编译器,jdk 提供编译器版本 -->
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<!-- 配置信息 source-源信息,target-字节码信息,compilerVersion-编译过程版 本 -->
<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>
2、tomcat管理插件
本地应用
使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。应用启 动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中 的具体功能。具体 pom.xml 文件的配置如下:
<build>
<!-- 配置tomcat插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8848</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
远程热部署
远程热部署是指,在 Tomcat 容器运行过程中,动态实现 war 工程的部署,重新部署功能。使用 maven build 功能实现,具体命令为: tomcat7:deploy或 tomcat7:redeploy。其中 deploy 代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部署同名 war 工程。实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验证方式。 实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访问用户,所以在 Tomcat 中也需提供部分配置。 如果是上传到本地只需要写在configuration下加上path(访问路径)以及port(端口号)
具体配置(pom.xml)内容如下:
<plugins>
<!-- 配置 Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- path: 上传的 war 包解压后的路径命名 -->
<path>/ROOT</path>
<!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 -->
<url>http://192.168.179.128:8080/manager/text</url>
<!-- 为 tomcat 配置的管理用户名和密码.如果设置后该步骤可省略 -->
<username>admin</username>
<password>admin</password>
</configuration>
</plugin>
</plugins>
3、资源拷贝插件
实现在打包时自动拷贝java目录下以及resources目录下的xml的配置文件
<!-- 资源拷贝插件,实现在打包时自动拷贝java目录下以及resources目录下的xml的配置文件 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
六、私服
介绍
私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程仓库,供局域网使用。作用
节省资金,外网带宽
加速Maven的构建
部署第三方构件
提高稳定性,增强控制
降低中央仓库的复合
搭建
搭建环境
环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse)
搭建步骤
1、安装JDK
JDK 官方下载地址为: http://www.oracle.com/technetwork/java/javase/downloads/index.html 本课程使用版本为 JDK1.7。(jdk-7u80-linux-x64.tar.gz) 附件也有。
2、JDK资源解压
在 Linux 中安装应用的常用目录为:/opt 或/usr/local 目录。本课件将 JDK 安装到 /usr/local/java 目录中。
解压 JDK 到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local
重命名 JDK 目录:
mv /usr/local/jdk1.7.0_80 /usr/local/java
3、环境变量配置
修改/etc/profile 配置文件,增加环境变量配置。 环境变量修改后,可以重启 Linux 实现永久生效;或执行 source /etc/profile 命令,让新 修改的环境变量在当前终端中生效。
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
4、安装Nexus
Nexus 官方下载地址为: https://www.sonatype.com/nexus-repository-oss 本课件应用版本为:nexus-2.11.2-03
5、 Nexus 资源包解压
在/usr/local 目录中创建子目录
nexus: mkdir /usr/local/nexus
解压 Nexus 到指定目录:
tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus Nexus
压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-work nexus-2.11.2-03 是具体的私服应用内容,sonatype-work 是 Nexus 私服下载的构件存放工 作目录。
6、 检查私服端口和工作目录
在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看 nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。配置文 件内容如下:
# Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。
application-port=8081 # 私服访问端口
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus # Nexus 私服 WEB 应用所在位置
nexus-webapp-context-path=/nexus # Nexus 私服 WEB 应用 contextPath
# Nexus section Nexus 私服配置信息
nexus-work=${bundleBasedir}/../sonatype-work/nexus # 私服工作目录,即构件保存目
录
runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录
7、修改 Nexus 运行用户
Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。 Nexus的启动脚本文件中,可以指定私服应用的访问用户,此信息在nexus-2.11.2-03/bin/nexus 脚本文件中定义。需要修改的信息如下:
# NOTE - This will set the user which is used to run the Wrapper as well as
# the JVM and is not useful in situations where a privileged resource or
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER= #原内容
RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。
8、修改防火墙,开放私服访问(或者每次使用时都关闭防火墙)
修改防火墙配置文件,开放 Nexus 私服的访问端口 8081(2.2.2.3 章节内容)。 vi /etc/sysconfig/iptables 增加下述内容:
vi /etc/sysconfig/iptables
增加下述内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
重新启动防火墙: service iptables restart
关闭防火墙: service iptables stop
9、访问客户端
http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP),访问效果如下:
Nexus 默认提供管理用户,用户名为 admin,密码为 admin123
仓库类型简介
仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组管理的多个仓库。
宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。
代理仓库:代理公共的远程仓库。
虚拟仓库:用于适配 Maven
链接:https://pan.baidu.com/s/1GPiv8TFKPgz5Qhlh_VFRzg
提取码:kj9u
复制这段内容后打开百度网盘手机App,操作更方便哦
或者通过官方网址自行下载 http://maven.apache.org/
- 需要的相关文件已经分享至本人百度云 ↩