笔记12:maven项目管理工具

maven基础

  maven开发项目	jar包不在项目中 	配置jar包的坐标

---依赖管理:

  maven工程对jar包的管理过程

---maven构建

  项目从编译、测试、运行、打包、安装、部署整个过程交给maven进行管理

---寻找jar包

  配置文件坐标 --》系统盘找本地仓库 --》(本地仓库未找到并联网)到中央仓库(放置了几乎所有开源的jar包)下载
                               --》(本地仓库未找到并在同一局域网)远程仓库(私服)(jar包没有则到中央仓库)^ 

---仓库三类:【本地】 【远程(私服)】 【中央仓库】

---项目部分:【核心代码】 【配置文件】 【测试代码】 【测试配置文件】

---Maven项目标准目录结构:

src/main/java			核心代码
src/main/resources		配置文件
src/test/java			测试代码部分
src/test/resources		测试配置文件
src/main/webapp			页面资源,js、css、图片等等

---maven两大核心功能

依赖管理
一键构建

---maven常用命令

【clean清理】		清理项目编译所有信息 
【compile编译】 	把src/main/java下的类文件编译为class文件
【test测试】		把src/main/java和src/test/java下的类文件都编译
【package打包】		把src/main/java和src/test/java下的类文件都编译并打成war包
【install安装】		把src/main/java和src/test/java下的类文件都编译并打成war包并把war包安装到了本地仓库
【deploy发布】		不可直接执行,需要进行配置
往后的命令都会把前一个命令执行一次

---maven生命周期

清理生命周期:	clean
默认生命周期:	compile-->test-->package-->install-->deploy		每一个构建项目的命令都对应了maven底层一个插件
站点生命周期:

---项目对象模型(POM)

项目自身信息	==》依赖管理模型
项目运行所依赖的jar包信息
项目运行环境信息,比如:jdk、tomcat信息
--依赖管理模型(dependency)
	<dependency>
		<groupId>javax.servlet</groupId>  		//公司组织名称:路径
		<artifactId>servlet-api</artifactId>	//项目名
		<version>2.5</version>					//版本号
		<scope>provided</scope>					//jar作用域
	</dependency>

---pom引入的jar包作用域 provided

compile			编译、测试、运行有效		参与打包
test 			测试						不参与打包
provided		编译、测试					不参与打包
runtime			测试、运行						
system			编译、测试					

---工程运行环境的修改

<bui1d> 
  <plugins>
	<p1ugin><!--配置运行tomat版本-->
		<groupId>org.apache.tomcat.maven</groupId>
		<artifactId>tomcat7-maven-plugin</artifactId>
		<bersion>2.2</version>
		<configuration>
			<port>8888</port><!--修改端口号-->
		</configuration>
	</plugin>
	<plugin><!--配置maven编译插件版本 即jdk版本-->
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<configuration>
			<target>1.8</target>
			<encoding>UTF-8</encoding>
		</configuration>
	</plugin>
  </plugins>
</build>

maven项目管理笔记

----maven:一个项目管理工具

--1-依赖管理:maven对项目中jar包的管理过程。
	传统工程==直接把jar包放置在项目中
	maven工程==真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
	--仓库三类:【本地】	【远程(私服)】	【中央仓库】
	--仓库间的关系:
		1-启动maven工程时,maven工程通过pom文件中jar包坐标去本地仓库
		2-默认情况下,如果本地仓库没有对应jar包并连着网,maven工程自动去中央仓库下载jar包到本地仓库。
		3-本地仓库没有对应jar包,没有网,在公司同一局域网下,会先从公司私服下载jar包
		4-私服没有jar包,可从中央仓库下载,也可从本地上传
--2-一键构建:maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作。
	--maven常用命令
		【clean清理】		清理项目编译所有信息 
		【compile编译】 	把src/main/java下的类文件编译为class文件
		【test测试】		把src/main/java和src/test/java下的类文件都编译
		【package打包】		把src/main/java和src/test/java下的类文件都编译并打成war包
		【install安装】		把src/main/java和src/test/java下的类文件都编译并打成war包并把war包安装到了本地仓库
		【deploy发布】		打jar包上传到私服。不可直接执行,需要进行配置

----Maven导入jar包冲突解决

<dependencies>
<!--maven工程要导入jar包的坐标,就必须要考虑解决jar包冲突
	解决jar包冲突的方式一:
		==第一声明优先原则:那个jar包的坐标靠上的位置,这个jar包就是先声明的
			先声明的jar包坐标下的依赖包,可以优先进入项目中
	解决jar包冲突的方式二:
		==maven导入jar包的一些概念
			==直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
			==传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去
		==路径近和优先原则。直接依赖路径比传递依赖路径近,那么最终进入项目的jar包回事路径近的直接依赖包
	解决jar包冲突的方式三:
		==当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号。
			因为此时依赖包使用的版本和默认本直接导入的jar包版本一样
-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.2.4.RELEASE</version><!--传递依赖:会导入spring-core:4.2.4.RELEASE-->
      <exclusions>
          <exclusion><!--排除该jar包下的传递依赖包spring-core-->
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version><!--传递依赖:会导入spring-core:5.0.2.RELEASE-->
  </dependency>
  <!--<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.2.8.RELEASE</version>&lt;!&ndash;直接依赖:会导入spring-4.2.8.RELEASE&ndash;&gt;
  </dependency>-->
</dependencies>
----以上坐标最终导入传递依赖:spring-core:5.0.2.RELEASE的jar包
----该解决jar包冲突的原则不是做一次项目用一次,而是有时需要导入一个新jar包时需要用(遵循)

----pom文件内标签

<!--
	Maven工程是可以分父子依赖关系的。
	凡是依赖别的项目后,拿到的项目的依赖包,都属于传递依赖。
		比如:当前a项目,被b项目依赖。那么a项目中所有jar包都会传递到b项目中。
			b项目开发者如果爱b项目中导入一套ssm框架的jar包,对于b项目是直接依赖
			那么直接依赖的jar包就会把a项目传递过去的jar包覆盖掉。
			为了防止以上情况的出现。我们可以把a项目中主要jar包的坐标锁住,那么其他依赖该项目的项目中,
			即便有同名jar包直接依赖,也无法覆盖。
-->
【<dependencyManagement>】== 锁定jar包版本 
	如在pom文件里加入:
	<dependencyManagement>
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis</artifactId>
				<version>${mybatis.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	--是赋值一份jar包坐标到该标签里,不是剪切,如果pom文件外没有jar包坐标,即便锁住也没用,因为根本就没有导入该jar包
【<properties>】 定义属性,便于统一管理。标签内标签名称可随意定义。
	如在pom文件里加入:
	<!-- 定义属性 -->
	<properties>
		<spring.version>5.0.2.RELEASE</spring.version>
		<mysql.version>5.1.6</mysql.version>
	</properties>
	<!-- 引用定义的属性 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version><!-- 引用定义的属性 -->
	</dependency>

----xml文件能写啥标签,全看文件上面的约束

----maven工程拆分与聚合

---拆分思想:maven把一个完整的项目,分成不同独立模块,这些模块都有各自独立的坐标。那个地方需要其中某个模块,就直接引用该模块坐标即可。
	今后公司开发一个新项目,先考虑的不是dao、service、utils、domain等如何编写,而是考虑这些模块是否已经存在。如果存在,直接引用。
---聚合思想:可以把拆分零散的模块聚合到一起编写一个完整的项目。
---工程和模块的区别:
	工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,
	代码完整,就可以说这是一个完整的项目。此项目是工程和模块没有关系。
	工程只能使用自己内部的资源,工程天生是独立的。后天可以和其他工程或模块建立关联关系。
	模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用。
---工程和模块关系:
	1-父子工程直接,子模块天生集成父工程,可以使用父工程所有资源。
	2-子模块天生之间天生没有关系。
	3-父子工程之间,不用建立关系。继承关系是先天的,不需要手动建立。
	4-平级之间的引用叫依赖,依赖不是先天的,需要后天建立。
	
---传递依赖下来的包是否能用?
	--传递下来的包是否能用,参考如下:
                  -----------------------------------------------------------
                  直接\传递    compile      privider    runtime    test
                  -----------------------------------------------------------
                  compile      compile     -           runtime      -
                  -----------------------------------------------------------
                  privider     privider    privider    privider     -
                  -----------------------------------------------------------
                  runtime      runtime     -           runtime      -
                  -----------------------------------------------------------
                  test         test        -           test         -
                  -----------------------------------------------------------
	直接依赖:作用域==compile
	传递依赖:作用域==test
	--如果对应 - ,表示传递丢失。
		实际开发中,如果传递依赖丢失,表现形式就是jar坐标导不进去,做法就是直接再导入一次。一般不会来查找是否真的导不进去。

----私服的应用

--安装与启动
	解压安装包,执行bin下nexus.bat文件安装服务
	conf目录下nexus.properties为主配置文件
	默认端口:8081
	可以访问图形化界面,登录:默认账号==admin 密码==admin123
	releases==正式版(发行版)
	snapshot==测试版 
	hosted==第三方 
	proxy==代理   contral==中央仓库
--配置group后:自动先从releases下载没有到snapshot没有到第三方下载没有到中央仓库下

--私服操作:
	--代码传到私服:
		1-先可以登录,配置maven配置文件server标签下添加登录配置
			 <server> 
			  <id>releases</id> 
			  <username>admin</username> 
			  <password>admin123</password> 
			</server> 
			<server> 
			  <id>snapshots</id> 
			  <username>admin</username> 
			  <password>admin123</password> 
			</server> 
		2-待上传代码模块pom.xml文件上配置上传配置
			<distributionManagement>     
				<repository>         
					<id>releases</id> <?--注意:pom.xml 这里<id> 和 settings.xml中配置的登录的id要一致 -->      
					<url>http://localhost:8081/nexus/content/repositories/releases/</url>     
				</repository>     
				<snapshotRepository>         
					<id>snapshots</id>         
					<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>     
				</snapshotRepository> 
			</distributionManagement> 
		3-执行maven中deploy命令
		4-上传后还是无法使用?因为能上传不一定能下载,所以需要爱maven的配置文件中配置下载
			<!-- 下载jar包配置 -->
			<profile> 
				<!--profile的id -->
				<id>dev</id>
				<repositories>
					<repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
						<id>nexus</id> <!--仓库地址,即nexus仓库组的地址 -->
						<url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下载releases构件 -->
						<releases>
							<enabled>true</enabled>
						</releases> <!--是否下载snapshots构件 -->
						<snapshots>
							<enabled>true</enabled>
						</snapshots>
					</repository>
				</repositories>
				<pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
					<pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
						<id>public</id>
						<name>Public Repositories</name>
						<url>http://localhost:8081/nexus/content/groups/public/</url>
					</pluginRepository>
				</pluginRepositories>
			</profile>
			<!-- 激活下载中配置 -->
			<activeProfiles>
				<activeProfile>dev</activeProfile>
			</activeProfiles>

----安装第三方jar包到本地仓库

1-cmd进入jar包所在目录运行
	mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
2-打开cmd直接运行
	mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\jar包\fastjson-1.1.37.jar(jar包所在目录)

----安装第三方jar包到私服

1-在maven的settings配置文件中添加登录私服第三方登录信息
	<server>
		<id>thirdparty</id>
		<username>admin</username>
		<password>admin123</password>
	</server>
2-cmd进入jar包所在目录运行
	mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
或2-打开cmd直接运行
	mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\jar包\fastjson-1.1.37.jar(jar包所在目录)-Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
posted @ 2020-07-20 14:17  小艾影  阅读(173)  评论(0编辑  收藏  举报