Maven____笔记摘抄
1
1.maven的作用
i.增加第三方Jar (spring-context.jar spring-aop.jar ....)
ii.jar包之间的依赖关系 (spring-context.jar 自动关联下载所有依赖的Jar,并且不会冲突)
b.将项目拆分成若干个模块
2.Maven概念:
是一个基于Java平台的 自动化构建工具
make-ant-maven-gradle
清理:删除编译的结果,为重新编译做准备。
编译:java->class
测试: 针对于 项目中的关键点进行测试,亦可用 项目中的测试代码 去测试开发代码;
报告:将测试的结果 进行显示
打包: 将项目中包含的多个文件 压缩成一个文件, 用于安装或部署。 (java项目-jar、web项目-war)
安装:将打成的包 放到 本地仓库,供其他项目使用。
部署:将打成的包 放到 服务器上准备运行。
--将java、js、jsp等各个文件 进行筛选、组装,变成一个 可以直接运行的项目
-- 大米->米饭
-Eclipse中部署的web项目可以运行
-将Eclipse中的项目,复制到tomcat/webapps中则不能运行
-项目可以在webappas中直接运行
Eclipse中的项目 ,在部署时 会生成一个 对应的 部署项目(在wtpwebapps中),区别在于: 部署项目 没有源码文件src(java),只有编译后的class文件和jsp文件
因为二者目录结构不一致,因此tomcat中无法直接运行 Eclips中复制过来的项目 (因为 如果要在tomcat中运行一个项目,则该项目 必须严格遵循tomcat的目录结构)
Eclipse中的项目 要在tomcat中运行,就需要部署: a.通过Eclipse中Add and Remove按钮进行部署
b.将Web项目打成一个war包,然后将该war包复制到tomcat/webapps中 即可执行运行
自动化构建工具maven:将 原材料(java、js、css、html、图片)->产品(可发布项目)
编译-打包-部署-测试 --> 自动构建
1.下载配置maven
a.配置JAVA_HOME
b.配置MAVEN_HOME : D:\apache-maven-3.5.3\bin
M2_HOME
c.配置path
%MAVEN_HOME%\bin
d.验证
mvn -v
e.配置本地仓库 maven目录/conf/settings.xml
默认本地仓库 :C:/Users/YANQUN/.m2/repository
修改本地仓库: <localRepository>D:/mvnrep</localRepository>
2.使用maven
约定 优于 配置
硬编码方式:job.setPath("d:\\abc") ;
配置方式:
job
conf.xml <path>d:\\abc</path>
约定:使用默认值d:\\abc
job
maven约定的目录结构:
项目
-src
--main :程序功能代码
--java java代码 (Hello xxx)
--resources 资源代码、配置代码
--test :测试代码
--java
--resources
pom.xml
<groupId>域名翻转.大项目名</groupId>
<groupId>org.lanqiao.maven</groupId>
<artifactId>子模块名</artifactId>
<artifactId>HelloWorld</artifactId>
<version>版本号</version>
<version>0.0.1-SNAPSHOT</version>
依赖:
commons-fileupload.jar --> commons-io.jar
A中的某些类 需要使用B中的某些类,则称为A依赖于B
在maven项目中,如果要使用 一个当时存在的Jar或模块,则可以通过 依赖实现(去本地仓库、远程仓库去寻找)
执行mvn: 必须在pom.xml所在目录中执行
maven常见命令: (第一次执行命令时,因为需要下载执行该命令的基础环境,所以会从远程仓库下载该环境到本地仓库)
编译: ( Maven基础组件 ,基础Jar)
mvn compile --只编译main目录中的java文件
mvn test 测试
mvn package 打成jar/war
mvn install 将开发的模块 放入本地仓库,供其他模块使用 (放入的位置 是通过gav决定)
mvn clean 删除target目录(删除编译文件的目录)
运行mvn命令,必须在pom.xml文件所在目录
依赖:
A jar -> B jar
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
依赖
1.依赖的范围、依赖的有效性
compile(默认) test provided
2.依赖排除
A.jar ->B.jar
当我们通过maven引入A.jar时,会自动引入B.jar
A.jar(x.java ,y.java,z.java) B.jar(p.java c.java i.java)
A.jar和B.jar之间的 依赖的本质:z.java ->c.java
<!-- 排除依赖 beans -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
依赖:
a.commons-fileupload.jar commons-io.jar :虽然我们实际开发时,认为二者jar必须关联,但是maven可能不这么认为。
b.如果X.jar 依赖于Y.jar,但是在引入X.jar之前 已经存在了Y.jar,则maven不会再在 引入X.jar时 引入Y.jar
3.依赖的传递性
A.jar-B.jar->C.jar
要使 A.jar ->C.jar :当且仅当 B.jar 依赖于C.jar的范围是compile
HelloWorldTime ->HelloWorld2 ->junit
4依赖原则:为了防止冲突
a.路径最短优先原则
b.路径长度相同:
i.在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖 会覆盖前面声明的依赖 (严禁使用本情况,严禁在同一个pom中声明2个版本不同的依赖)
ii.如果是不同的 pom.xml中有2个相同的依赖(优先):则先声明的依赖 ,会覆盖后声明的依赖
(JDK只能够识别 source folder中的源码)
多个maven项目(模块)之间如何 依赖: p项目 依赖于->q项目
1. p项目 install 到本地仓库
2. q项目 依赖:
<!-- 本项目 依赖于HelloWorld2项目 -->
<dependency>
<groupId>org.lanqiao.maven</groupId>
<artifactId>HelloWorld2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在Eclipse中创建maven工程:
1.配置maven:
配置maven版本
配置本地仓库 : 设置settings.xml
在eclipse中编写完pom.xml依赖后,需要maven-update project
package:
resources
compile
test
package
maven生命周期:
生命周期和构建的关系:
生命周期中的顺序:a b c d e
当我们执行c命令,则实际执行的是 a b c
生命周期包含的阶段:3个阶段
clean lifecycle :清理
pre-clean clean post-clearn
default lifecycle :默认(常用)
site lifecycle:站点
pre-site site post-site site-deploy
再次强调:在pom.xml中增加完依赖后 需要maven - update project
统一项目的jdk:
build path:删除旧版本,增加新版本
右键项目-属性-Project Factors -java version 改版本 (之前存在要改的版本)
通过maven统一jdk版本:
<profiles>
<profile>
<id>jdk-18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
2、继承、聚合、web部署
打包方式:
java工程——jar
web项目-war
父工程-pom 继承实现步骤:
1.建立父工程: 父工程的打包方式为pom 2.在父工程的pom.xml中编写依赖:
<dependencyManagement>
<dependencies>
<dependency> 3.子类:
<!-- 给当前工程 继承一个父工程:1加入父工程坐标gav 2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径 -->
<parent>
<!-- 1加入父工程坐标gav -->
<groupId>org.lanqiao.maven</groupId>
<artifactId>B</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径 -->
<relativePath>../B/pom.xml</relativePath>
</parent> 4.在子类中 需要声明 :使用那些父类的依赖 <dependency>
<!-- 声明:需要使用到父类的junit (只需要ga) -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency> 聚合: Maven项目能够识别的: 自身包含、本地仓库中的 Maven2依赖于Maven1,则在执行时:必须先将Maven1加入到本地仓库(install),之后才能执行Maven2
以上 前置工程的install操作,可以交由“聚合” 一次性搞定。。。 聚合的使用: 在一个总工程中配置聚合: (聚合的配置 只能配置在(打包方式为pom)的Maven工程中)
modules
<modules>
<!--项目的根路径 -->
<module>../Maven1</module>
<module>../Maven2</module> </modules>
配置完聚合之后,以后只要操作总工程,则会自动操作 改聚合中配置过的工程 注意:clean命令 是删除 target目录,并不是清理install存放入的本地仓库 聚合:
Maven将一个大工程拆分成 若干个子工程(子模块)
聚合可以将拆分的多个子工程 合起来
继承:
父->子工程,可以通过父工程 统一管理依赖的版本 部署Web工程:war 通过maven直接部署运行web项目:
a.配置cargo
b. maven命令:deploy 实际开发中,开发人员 将自己的项目开发完毕后 打成war包(package) 交给实施人员去部署; http://www.mvnrepository.com
3
<build> <finalName>WebProjectName</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat8-5-30</containerId>
<home>D:\study\apache-tomcat-8.5.30</home>
</container>
<configuration>
<type>existing</type>
<home>D:\study\apache-tomcat-8.5.30</home>
<!-- 默认值8080 -->
<properties>
<cargo.servlet.port>8888</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>
Maven____笔记摘抄的更多相关文章
- xmpp即时通讯的笔记(摘抄)
xmpp的使用: 即时通讯 instant messaging(IM) : -->实时收发信息! 即时通讯相关软件: **QQ,MSN,GoogleTalk,AIM,Jabber(XMPP别名 ...
- Java并发编程笔记—摘抄—基础知识
什么是线程安全 当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的. 竞态 ...
- pxe无人值守安装linux机器笔记----摘抄
1. 基建工作 1.关闭防火墙 a)service iptables stop b)service ip6tables stop c)chkconfig iptables off d)chkconfi ...
- Eureka服务治理学习笔记(摘抄)
1.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于R EST的服务,用于定位服务,以实现云端中间层服务发 ...
- Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器
一.map/reduce map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次 作用到序列的每个元素,并把结果作为新的Iterator返回. reduce r ...
- Handlerbars基础笔记
此笔记摘抄于杨元的博客(http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) 引入 <script type=&qu ...
- 三维重建7:Visual SLAM算法笔记
VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- 深入理解Java虚拟机二 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
随机推荐
- 【做题笔记】[NOIOJ,非NOIp原题]装箱问题
题意:给定一些矩形,面积分别是 \(1\times 1,2\times 2,3\times 3,4\times 4,5\times 5,6\times 6\).您现在知道了这些矩形的个数 \(a,b, ...
- find 报错 find: paths must precede expression:
编写shell脚本,报错,如下面 [root@localhost backup]#find ./ -name mysqldump* -mtime +3 -delete [root@localhost ...
- 树莓派4B踩坑指南 - (11)免费搭建网站(宝塔,花生壳)
目录 宝塔 安装宝塔面板 登录及初始化设置 安装网站 花生壳 安装花生壳 设置花生壳 测试 问题(未解决但不影响使用) 网站统计 树莓派这么低的功耗,不用来当服务器总感觉有点浪费...完成效果:htt ...
- cpu io disk mem监控 python
import psutil def cpu_information(): #scputimes(user=26.9, nice=0.1, system=50.27, idle=8551.89, iow ...
- i.MX RT1010之FlexIO模拟SSI外设
恩智浦的i.MX RT1010是跨界处理器产品,作为i.MX RT跨界MCU系列的一个新的切入点,i.MX RT1010是成本最低的LQFP封装方式与i.MX RT系列产品一贯的高性能和易用性的结合产 ...
- linux 下部署web 程序
linux 下部署web 程序 1. 创建ucenter用户 一般情况下,发布应用程序都不是使用root用户的,需要创建一个普通用户来发布程序: 创建ucenter用户: useradd -d /uc ...
- GO学习之 从hello.go开始
一.GO运行的两种方式 1.如果是对源码编译后,再执行 如:hello.go文件 hello.go文件(源文件)----go build hello.go[编译文件]--->变成可执行文件(.e ...
- Etcd Learning Notes
官网:https://etcd.io 官方项目地址:https://github.com/etcd-io/etcd 参考资料: https://www.hi-linux.com/posts/40915 ...
- ES-Result window is too large
问题: Result window is too large 解决: PUT http://127.0.0.1:9200/catalog/_settings { "index": ...
- 数据库单,多,全库、冷热备份思路及备份与还原(mysqldump)
热备份:服务开启状态下进行备份, 冷备份:服务关闭状态进行备份, 冷备份 数据库原有内容如下: MariaDB [(none)]> show databases;+--------------- ...