• 笔记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_javajar包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_javajar包fastjson-1.1.37.jar(jar包所在目录)-Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
  • 相关阅读:
    [IOI2013]Dreaming
    Lost Cows
    Mobile Service
    [POI2005]Bank notes
    [CTSC2007]动物园zoo
    [CF1093F]Vasya and Array
    [雅礼集训 2017 Day1]市场
    [APIO2014]序列分割
    [CEOI2004]锯木厂选址
    [APIO2010]特别行动队
  • 原文地址:https://www.cnblogs.com/xiaoaiying/p/13344819.html
Copyright © 2020-2023  润新知