赞
踩
使用工具: eclipse,jdk1.8,maven2.2
Maven 是Apache组织中一个颇为成功的开源项目,Maven 主要服务基于java 平台的项目构建,依赖管理和项目信息管理.无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,Maven都能很好的应用.
项目构建: 项目的编译,单元测试,生成文档,打包和部署.
Ant 构建
Maven (java)
Gradle
Maven 为 Java 世界引入了一个新的依赖管理系统 jar 包管理, jar 升级时修改配置文 件即可。在 Java 世界中,可以用 groupId、artifactId、version 组成的 Coordination(坐 标)唯一标识一个依赖。
任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 Jar 包,也 可以是 war 包或者 jar 包。一个典型的依赖引用如下所示:
javax.servlet com.baidu javax.servlet-api ueditor echarts 3.1.0
坐标的理解
Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。
项目复查时 dao service controller 层分离将一个项目分解为多个模块已经是很通用 的一种方式。 在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 标签来定义一组的模块。parent POM 不会有什么实际构建产出。 而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module。
Ant 时代大家创建 Java 项目目录时比较随意,然后通过 Ant 配置指定哪些属于 source, 那 些 属 于 testSource 等 。 而 Maven 在 设 计 之 初 的 理 念 就 是 Conversion over configuration(约定大于配置)。其制定了一套项目目录结构作为标准的 Java 项目结构, 解决不同 ide 带来的文件目录不一致问题。
org.mortbay.jetty maven-jetty-plugin 6.1.25 10 /test
在根目录中创建一个pom.xml 文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> 4.0.0 com.mohen maven01 0.0.1-SNAPSHOT jar maven01 http://maven.apache.org UTF-8 junit junit 3.8.1 test
package com.mohen.demo;public class Hello{ public static void main(String[] args) { System.out.println("hello maven"); }}
cmd 下面, 进入项目的根目录
2.3.1 编译Java文件
mvn compile
2.3.2 执行main 方法
mvn exec:java -Dexec.mainClass="com.mohen.demo.Hello"
第一次下载会比较慢,要修改maven 加压之后的conf 目录下的 settings.xml.
1.1.修改默认仓库位置 打开 maven 目录 -> conf -> settings.xml 添加仓库位置配置 F:/m2/repository 注:仓库位置改为自己本机的指定目录,"/"不要写反 1.2.更换阿里镜像,加快依赖下载
nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
1.3 编译不成功可能的原因
eclipse 默认情况下已经集成了 maven 插件,但对于 maven 的环境我们这里还需要 进行相应的环境配置。
操作步骤 : Window --> Preferences --> Maven
选择 Installations --> Add,添加 maven,勾选新添加的 maven 版本
选择User Settings, 修改 maven 的配置文件的位置
左侧空白右键,选择 New --> Project--> 搜索 Maven,选择 Maven Project
使用默认的工作空间,然后Next , 选择Maven 项目的模板
添加Artifact Id
Maven 项目建立后,需要修改maven 项目相关环境
选中项目 选择 Run As --> maven build
设置对应的命令
执行成功
注: 第一次执行该命令报错时,将jre 运行环境添加 maven 环境参数
环境调整
项目右击选择 Properties,选择 Project Facets
eclipse 不能直接修改 Web 版本,可直接在配置文件(工作空间的 settings)中修改:
修改完后刷新即可.
test org.mortbay.jetty maven-jetty-plugin 6.1.25 10 /test 9090
启动项目
选中项目 选择 Run As --> maven build
在Goals:( 输入命令) jetty : run
启动 jetty 服务器,也可以输入命令 jetty:run -D jetty.port=9090 启动服务浏览器访问
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 /test UTF-8 test tomcat8
启动项目 选中项目 run as -->maven build -->goals,输入命令 tomcat7:run
Maven 依赖仓库:https://mvnrepository.com/
当第一次运行 Maven 命令的时候, 你需要有网, 因为它需要从网上下载一 些文件。 那么它从哪里下载呢? 它是从 Maven 默认的远程库下载的。 这个远程仓库由 Maven 的核心插件和可供下载的 jar 文件。
对于 Maven 来说, 仓库只分为两类: 本地仓库和远程仓库。
当 Maven 根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在,则 直接使用; 如果本地没有,Maven 就会去远程仓库查找,发现需要的构件之后,下载到本 地仓库再使用。 如果本地仓库和远程仓库都没有,Maven 就会报错。
远程仓库分为三种: 中央仓库,私服, 其他公共库。
由于原始的本地仓库是空的,maven 必须知道至少一个可用的远程仓库,才能执行 maven 命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库。 maven-model-builder-3.3.9.jar maven 自动的 jar 中 包含了一个 超级 POM。定义 了默认中央仓库的位置。 中央仓库包含了 2000 多个开源项目,接收每天 1 亿次以上的访问。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务, 私服代理广域网上的 远程仓库,供局域网内的 maven 用户使用。 当 maven 需要下载构件时, 它去私服当中 找,如果私服没有, 则从外部远程仓库下载,并缓存在私服上, 再为 maven 提供。 此外,一些无法从外部仓库下载的构件也能从本地上传到私服提供局域网中其他人使用.
使用maven 提供的多模块构建的特性完成 maven 环境下多个模块的项目的管理与构建.
项目组织
1.1 选择 Maven Project
1.2 勾选复选框,跳过模板的选择
1.3 设置项目相关信息,Packaging 选择 pom
2.1 选中 mohen_par 后 选择新建 Maven Module 模块项目
2.2 设置子项目的名称
2.3 选择快速创建 Java 普通项目
2.4 设置子项目的包名
步骤如上,建立 mohen_service 子项目 mohen_par、mohen_dao、mohen_service 三个项目建立后,建立 web 层子项目 mohen_web
package com.mohen_dao;public class UserDao { public static void add() { System.out.println("dao add..."); }}
com.mohen mohen_dao 0.0.1-SNAPSHOT
Service 添加方法
package com.mohen_service;import com.mohen_dao.UserDao;public class UserService { public static void add() { UserDao.add(); System.out.println("service add..."); }}
选中 mohen_par ,新建 Maven Module 模块 ,选择 webapp 类型项目
根项目中引用子项目的模块
mohen_dao mohen_service mohen_web
修改父项目与子项目的 jre 环境及 web 项目的版本,分别右键项目,选择 Properties,选择 Build Path,设置 jre 环境;web 项目需要去工作空间中设置 web 版本。(前面有具体的步骤) 修改根项目 pom 配置,添加 servlet 的 jar 包依赖
javax.servlet javax.servlet-api 3.0.1 provided
添加编译环境插件(可以不加)
org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.8 1.8 UTF-8
com.mohen mohen_service 0.0.1-SNAPSHOT
添加 source 文件夹(如果没自动生成,就手动创建)
编写测试 servlet
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mohen_service.UserService;@WebServlet(urlPatterns="/userAction.do")public class UserAction extends HttpServlet { private static final long serialVersionUID = 1661933106038150349L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("user servlet ..."); UserService.add(); }}
添加 tomcat 插件
org.apache.tomcat.maven tomcat7-maven-plugin 2.1 /web UTF-8 web tomcat7
选中父项目 右键 run as -> maven install ,执行安装
安装成功
启动 tomcat tomcat7:run
效果 浏览器输入:http://localhost:8080/web/userAction.do
对于企业级项目,无论是进行本地测试,还是测试环境测试以及最终的项目上线,都会 涉及项目的打包操作,对于每个环境下项目打包时,对应的项目所有要的配置资源就会有所 区别,实现打包的方式有很多种,可以通过 ant,获取通过 idea 自带的打包功能实现项目打 包,但当项目很大并且需要的外界配置很多时,此时打包的配置就会异常复杂,对于 maven 项目,我们可以用 pom.xml 配置的方式来实现打包时的环境选择,相比较其他形式打包 工具,通过 maven 只需要通过简单的配置,就可以轻松完成不同环境下项目的整体打包。 比如下面这样一个项目,项目中配置了不同环境下项目所需要的配置文件,这时候需要 完成不同环境下的打包操作,此时通过修改 pom.xml 如下:
dev dev true test test product product
对于项目资源文件的配置放在 build 中
src/main/resources/${env} src/main/java **/*.xml **/*.properties **/*.tld false
此时对应打包命令,选中项目,右键 run as,选择 maven build 输入命令 clean compile package -Dmaven.test.skip=true 打包默认环境(开发环境)并且跳过 maven 测试操作 clean compile package -Ptest -Dmaven.test.skip=true 打包测试环境并且跳过 maven 测试操作 clean compile package -Pproduct -Dmaven.test.skip=true 打包生产环境并且跳过 maven 测试操作
根元素 project 下的 dependencies 可以包含多个 dependence 元素,以声明多个依赖。每个依赖都应该包含以下元素:
首先需要知道,Maven 在编译项目主代码的时候需要使用一套 classpath。 比如:编译项目代码的时候需要用到 spring-core, 该文件以依赖的方式被引入到 classpath 中。 其次, Maven 在执行测试的时候会使用另外一套 classpath。 如:junit。最后在实际运行项目时,又会使用一套 classpath, spring-core 需要在该 classpath中,而 junit 不需要。 那么依赖范围就是用来控制依赖与这三种 classpath(编译 classpath,测试 classpath, 运行时 classpath)的关系, Maven 有以下几种依赖范围:( 上面Scope中的5种 )
传递依赖机制, 让我们在使用某个 jar 的时候就不用去考虑它依赖了什么。也不用担心引入多余的依赖。 Maven 会解析各个直接依赖的 POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前项目中。 注意: 传递依赖有可能产生冲突!! 冲突场景 A-->B--->C (2.0) A-->E--->C (1.0) 如果 A 下同时存在两个不同 version 的 C,冲突!!(选取同时适合 A、B 的版本)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。