01 自动化构建工具:Maven
浏览器
表示层、表述层、表现层:①视图层:H5、CSS、JS、JSP等 ②控制层:Servlet、Action(Struts2)、Handler(SpringMVC)等
业务逻辑层:Spring IOC / AOP
持久化层:JDBC、DBUtils、SpringTemplate、Hibernate、Mybatis
数据库:Mysql、Oracle
02 目前的技术在开发中存在的问题
① 一个项目就是一个工程
② 项目中需要的jar包必须手动"复制"、"粘贴"到 WEB-INF / lib 目录下
③ jar 包需要别人替我们准备好,或到官网下载
④ 一个 ja r包依赖的其它 jar 包需要自己手动加入到项目中,FileUpload组件->IO组件
03 Maven是什么
① Maven一款服务于Java平台的自动化构建工具。
Make-->Ant-->Maven-->Gradle
② 构建
(1)概念:以"Java源文件","框架配置文件","JSP","HTML","图片"等资源为原材料,去"生产"一个可以运行的项目的过程
编译,部署,搭建
(2)编译:Java 源文件(User.java)->编译->Class字节码文件(User.class)->交给JVM去执行
(3)部署:一个 BS 项目最终运行的并不是动态Web 工程本身,而是这个动态 Web 工程的"编译结果":动态Web工程->编译、部署->编译结果
动态 Web 工程目录结构:
工程名
src 源码
JRE System Library 运行时环境
Apache Tomcat v6.0 运行时环境
build 源码的字节码文件
WebContent 前端页面展示
META-INF
WEB-INF
lib
web. index.jsp
③构建过程中的各个环节
(1)清理:将以前编译得到的旧的 class 字节码文件删除,为下一次编译做准备
(2)编译:将 Java 源程序编译成 class 字节码文件
(3)测试:自动测试,自动调用 junit 程序
(4)报告:测试程序执行的记过
(5)打包:动态 Web 工程打war 包,Java工程打 jar 包
(6)安装:Maven 特定的概念--将打包得到的文件复制到"仓库"中指定位置
(7)部署:将动态 Web 工程生成的war 复制到 Servlet 容器的指定目录下,使其可以运行
④自动化构建
04 安装 Maven核心程序
① 检查 JAVA_HOME 环境变量
② 解压Maven 核心包文件,放在一个无中文无空格的路径下
③ 配置Maven 相关环境变量
(1)MAVEN_HOME或M2_HOME :Maven核心包解压后的路径
(2)Path:追加Maven核心包解压后的路径 / bin
④ 验证:运行 mvn -v,查看 Maven 版本
05 Maven的核心概念
① 约定的目录结构
② POM
③ 坐标
④ 依赖
⑤ 仓库
⑥ 生命周期/插件/目标
⑦ 继承
⑧ 聚合
06 第一个 Maven 工程
① 创建 Maven 约定的目录结构
Hello 工程名
| src 源码
| | main 主程序
| | | java Java源文件
| | | resources 存放框架或其它工具配置文件
| | test 测试程序
| | | java
| | | resources
| pom.xm Maven配置核心文件
② 为什么要遵守约定的目录结构
约定 > 配置 > 编码
③ pom.
07 常用Maven 命令
① 注意:执行与构建过程相关的Maven的命令时,需要进入pom. 与构建过程相关:编译,测试,打包
② 常用命令:
(1)mvn clean:清理
(2)mvn compile:编译主程序
(3)mvn test-compile:编译测试主程序
(4)mvn test:执行测试
(5)mvn package:打包
(6)mvn install:安装
(7)mvn site:生成站点
08 关于联网问题
① Maven 的核心程序中仅仅定义了抽象的声明周期,但是具体的工作必须由特定的插件来完成,而插件本身并不包含在 Maven 的核心程序中。
② 当我们指定的 Maven 命令需要用到某些插件时,Maven 核心程序会首先到本地仓库中查找。
③ 本地仓库的默认位置:[系统用户] \ .m2 \ repository
④ Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网到中央仓库下载。
⑤ 如果此时无法连接外网下载,则构建失败。
⑥ 修改默认本地仓库的位置可以让 Maven 核心程序到我们事先准备好的目录下查找插件
(1)找到 Maven 解压目录 \ conf \ settings. (2)在 setting. (3)将<localRepository>/path/to/local/repo</localRepository>从注释中取出
(4)将标签体内容修改为已经准备好的 Maven 仓库路径,如:
<localRepository> F:Maven </localRepository>
执行 mvn compile 命令会在 src 级目录下生成 target 文件(含字节码文件)
执行 mvn test-compile 命令会在 src 级目录下生成 target 文件(含字节码文件)
执行 mvn package命令会在 src 级目录下生成target / *.jar 文件,以及辅助文件和测试报告
执行 mvn test 命令会删除 target 文件(含字节码文件)
09 POM
① 含义:Porject Object Model 项目对象模型
DOM:Document Object Model
② pom. 重要程度相当于 web.
10 坐标
① 数学中的坐标,平面中的X、Y标识平面中的任何一点,空间的X、Y、Z标识空间中的任何一点
② Maven的坐标
使用下面三个向量在仓库中唯一定位一个 Maven工程
(1) groupid:公司或组织名倒序 + 项目名:<groupid>com.cxj.maven</groupid>
(2) artfactid:模块名:<artifactid>Hello</artifactid>
(3) version:版本:<version>1.0.1</version>
③ Maven工程的坐标与仓库中路径的对应关系,各自对应
11 仓库
① 仓库的分类
(1) 本地仓库:在当前计算机系统文件中,为当前电脑上所有的 Maven 工程服务
(2) 远程仓库:
a 私服:搭建在局域网,为局域网范围内的所有 Maven工程服务
b 中央仓库:架设在Internet 上,为全世界所有 Maven 工程服务
c 中央仓库镜像:架设在各个大洲,为中央仓库分担流量,减轻中央仓库的压力,同时更快响应用户的请求
② 仓库中保存的内容
(1) Maven 自身所需的插件
(2) 第三方框架或工具的 jar 包,(第一方是JDK,第二方是开发人员)
(3) 我们自己开发的 Maven 工程
12 第二个 Maven 工程(RELEASE:稳定版本,SNAPSHOT:不稳定版本)
① 建 Maven 工程:Hello ,HelloFriend
② 在 HelloFriend 工程中引用 Hello工程中的类
③ 在 HelloFriend 工程下的 pom. <dependencies>
<dependency>
<groupid>com.cxj.maven<groupid>
<artifactid>Hello</artifactid>
<version>1.0.0-SNAPSHOT</version>
<scop>compile</scop>
</dependency>
</dependencies>
④ 进入 HelloFriend 工程的 pom. ⑤ 出现编译失败,无法解析依赖信息。是因为 Hello 工程没有 执行 mvn install 安装命令
⑥ 因此先将 Hello 工程执行 mvn install ,再将 HelloFriend 工程执行 mvn compile 即可
13 依赖
① Maven 解析依赖信息时会到本地仓库中查找被依赖的jar包
对于我们自己开发的 Maven 工程,使用 install 命令安装后就可以进入仓库
② 依赖的范围 <scop>:compile 、test、provided
(1) compile(如:spring-core)
是否对主程序有效:有效
是否对测试程序有效:有效
是否参与打包:参与
是否参与部署:参与
(2) test(如:junit)
是否对主程序有效:无效
是否对测试程序有效:有效
是否参与打包:不参与
是否参与部署:不参与
(3) provided:依赖一些特定的 API(不是开发人员写的类,如:servlet-api.jar,由服务器提供)
是否对主程序有效:有效
是否对测试程序有效:有效
是否参与打包:不参与
是否参与部署:不参与
14 生命周期:Clean、Default、Site
①各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行
Default生命周期常用的阶段:
validategenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resources 复制并处理资源文件,至目标目录,准备打包compile 编译项目的源代码process-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resources 复制并处理资源文件,至目标测试目录test-compile 编译测试源代码process-test-classestest 使用合适的单元测试框架运行测试,这些测试代码不会被打包或部署prepare-packagepackage 接收编译好的代码,打包成可发布的格式,如:JARpre-integration-testintegration-test
② Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
③ Maven 核心程序为例更好的实现自动化构建,按照这一的特点
④ 插件和目标
(1) 生命周期的各个阶段仅仅定义了要执行的任务是什么
(2) 各个阶段和插件的目标是对应的
(3) 相似的目标由特定的插件来完成
(4)可以将目标看作"调用插件功能的命令"
15 Eclipse 中设置 Maven 插件(eclipse中内置了Maven,默认由自带的Maven)
①Window->preferences->Maven->Installations->Add :指定Maven 核心程序的位置。
②Window->preferences->Maven->User Settings :指定 conf / settings. ③ 基本操作
(1) 创建 Maven 版的Java 工程
a. Window->Perspective->Customize Perspective->Menu Visibility->File->New->Maven Project,将Maven Project加入到快捷键New中
b. New->Maven Project->勾选 " Create a simple project (skip archetype selection)",如不勾选,则在下一步中勾选"maven-archetype-quickstart"
输入Group Id , Artifact Id,Version,Package(jar、war、pom),确定finish
c. 改JDK版本,手动改:,,,,自动改:打开settings.
<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> <maver.compiler.compilerVersion>1.7</maven.comiler.compilerVersion> </properties></profile>
若不能识别,则提高Maven版本即可
(2)创建 Maven 版的JavaWeb 工程
a. New->Maven Project->勾选 " Create a simple project (skip archetype selection)",如不勾选,则在下一步中勾选"maven-archetype-quickstart"
输入Group Id , Artifact Id,Version,Package(jar、war、pom),确定finish
b. 右键工程-->Properties-->Project Facets-->去掉Dynamic Web Module-->Apply-->再勾选Dynamic Web Module-->
点击"Further configuration availbale..."-->在Content directory中输入src/main/webapp
(3)执行 Maven 命令:run as-->再选择响应的 Maven命令
(4)手动创建的Maven 工程导入Eclipse 时,需要选择导入Maven Project,不能以Java 工程导入
④ 在 setting.
<dependency> <groupid>javax<groupid> <artifactid>servlet-api</artifactid> <version>2.5</version> <scop>provided</scop></dependency>
16 依赖
① 依赖的传递性,好处:可以传递的依赖不必在每个模块工程中都重复声明,在"最下面"的工程中依赖一次即可(<scop>compile</scop>,test和provided只提供给本项目使用,不能传递)
若项目 A 依赖与项目 B,当在项目 B 中加入其它依赖时,项目 B 的运行环境中也会加入相应的依赖,
② 依赖的排除,若项目A依赖与项目 B,当在项目 B 中加入其它依赖时,若加入的依赖版本过低,则需要排除,项目A需要自己加高版本依赖,
如:在 A 的 pom.
<dependency> <groupid>B<groupid> <artifactid>B</artifactid> <version>B</version> <scop>B</scop> <exclusions> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusions></denpendcy>
③ A-->B-->C,若项目 A 依赖项目 B,项目 B依赖 项目 C,当项目C 和项目B 传递上来两个版本不一致的junit-api.jar时,最短路径优先
④ A--B,A--C,若项目A 依赖 项目B,项目A 依赖 项目 C,当项目B 和项目 C传递上来两个版本不一致的junit-api.jar时,最先声明者优先(指dependency标签的声明顺序)
⑤ 依赖的原则:解决模块工程之间的jar 包冲突问题
⑥ 统一管理依赖的版本:使用 properties 标签。如:依赖的spring 包由很多同时它们的版本一致,要修改时,手动注意修改??如:
<properties> <atcxj.spring.version>4.0.0.RELEASE<atcxj.spring.version> //自定义声明的标签:<atcxj.spring.version >,引用时:<version>&{atcxj.spring.version}</version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> //编码</properties><dependencies> <dependency> <groupid>org.springframeword<groupid> <artifactid>spring-orm</artifactid> <version>&{atcxj.spring.version}</version> <dependency><dependency> <groupid>org.springframework<groupid> <artifactid>spring-web</artifactid> <version>&{atcxj.spring.version}</version> <dependency></dependencies>⑦ propeties 标签并不只能用于声明依赖的版本号,凡是需要统一声明后再引用的场合都可以使用。
17 继承
① 现状
Hello依赖的junit:4.0
HelloFriend依赖的junit:4.0
MakeFriend依赖的junit:4.9
由于 test 范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
② 需求:统一管理各个模块工程中对 junit 依赖的版本
③ 解决思路:将junit 依赖统一提取到"父"工程中,在子工程中声明 junit 依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。
④ 操作步骤
(1) 创建一个 Maven 工程作为父工程,注意:打包方式为pom,如:父工程中pom.
<groupid>com.cxj.maven<groupid><artifactid>Parent</artifactid><version>0.0.2-SNAPSHOT</version><packaging>pom</packaging>
(2) 在子工程中声明对父工程的引用,子工程中pom.
<parent> //<parent>标签在<dependencies>标签外部 <groupid>com.cxj.maven<groupid> <artifactid>Parent</artifactid> <version>0.0.2-SNAPSHOT</version> <relativePath>../Parent/pom.//以当前文件为基准的父工程pom.</parent>
(3) 将子工程的坐标中与父工程中重复的内容删除
(4) 在父工程中统一管理 junit 的依赖
<dependencyManagement> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.0</version> <scop>test</scop> </dependency> </dependencies></dependencyManagement>
(5) 在子工程中删除junit 依赖的版本号部分,此时子工程中 junit 的版本就是父工程中管理的junit 版本,若不删除则使用的就是该 junit 版本
18 聚合(一键安装各个模块工程)
① 使用情景:当工程模块之间有依赖后,执行 mvn compile 时,需要被依赖的项目模块提前执行 mvn install
② 配置方式:在一个"总的聚合工程" 中配置各个参与聚合的模块
<modules>../Hello</modules><modules>../HelloFriend</modules><modules>../MakeFriends</modules> //无先后顺序
③ 使用方式:在聚合工程的 pom.
19 自动部署:就是将项目打包,然后存放到 tomcat 服务器运行,在命令行中使用 mvn deploy
<build> //配置当前工程构建过程中的特殊设置| <finalName>AtCxjWeb</finalName>| <plugins> //配置构建过程中需要使用的插件| | <plugin>| | | <groupId>org.codehaus.cargo</groupId> //cargo 是一家专门 "启动sevlet容器"的组织| | | <artifactId>cargo-maven2-pligin</artifactId>| | | <version>1.2.3</version>| | | <configurations>| | | | <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>| | | | | <properties>| | | | | <cargo.servlet.port>8989</cargo-servlet-port> //如果tomcat 端口为默认值8080则不必设置该属性| | | | | </properties>| | | | </configuration>| | | </configurations>| | | <executions> //配置插件在什么情况下执行| | | | <execution>| | | | | <id>cargo-run</id>| | | | | <phase>install</phase> //生命周期的阶段| | | | | <goals>| | | | | | <goal>run<goal> //生命周期的目标| | | | | </goals>| | | | </execution>| | | </executions>| | </plugin>| </plugins></build>
20 查找依赖的网址:
https://mvnrepository.com
原文转载:http://www.shaoqun.com/a/494975.html
自贸区跨境通网站:https://www.ikjzd.com/w/1329
败欧洲网站:https://www.ikjzd.com/w/1555
贝恩投资公司:https://www.ikjzd.com/w/1336
01自动化构建工具:Maven 浏览器 表示层、表述层、表现层:①视图层:H5、CSS、JS、JSP等②控制层:Servlet、Action(Struts2)、Handler(SpringMVC)等 业务逻辑层:SpringIOC/AOP 持久化层:JDBC、DBUtils、SpringTemplate、Hibernate、Mybatis 数据库:Mysql、Oracle02目
photobucket:photobucket
insider:insider
增城哪里最好玩?哪里的东西最好吃?:增城哪里最好玩?哪里的东西最好吃?
盘点:美国部分州最美风景:盘点:美国部分州最美风景
川龙峡森林峡谷漂流介绍?惠州川龙峡森林峡谷漂流好玩么?:川龙峡森林峡谷漂流介绍?惠州川龙峡森林峡谷漂流好玩么?