当前位置:首页 > 软件设计 > 正文内容

Maven 收拾

邻居的猫1个月前 (12-09)软件设计2033

Maven简介

Maven的实质是一个项目办理工具,将项目开发和办理进程笼统成一个项目方针模型(POM:Project Object Model)

这玩意儿是运用Java开发的,所以选用的便是Java的思维:面向方针

截屏2021-07-17 下午6.51.07

Maven的效果:

  1. 项目构建:供给规范的、跨渠道的自动化项目构建方法
  2. 依靠办理:便利快捷的办理项目依靠的资源(jar包),防止资源间的版别抵触问题
  3. 一致开发结构:供给规范的、一致的项目结构

下载与装置:

  • 官网:http://maven.apache.org/
  • 下载:http://maven.apache.org/download.cgi

Maven根底概念

image-20240621211654330

库房:用于存储资源,包括各种jar包

库房分类:本地库房和长途库房(私服和中心库房)

坐标:Maven中的坐标用于描绘库房中资源的方位

坐标的首要组成:

  • groupId:界说当时Maven项目从属安排称号(通常是域名反写)
  • artifactId:界说当时Maven项目称号(通常是模块称号)
  • version:界说当时版别号
  • packaging:界说该项意图打包方法

坐标的效果:运用仅有的标识,仅有性定位资源方位,经过该标识能够将资源的辨认与下载交由机器完结。

库房装备:

  • 本地库房装备:默许方位与自界说方位
  • 长途库房装备:
<repositories> 
    <repository>
    <id>central</id>
    <name>Central Repository</name>
    <url>https://maven.aliyun.com/repository/central</url>
    <layout>default</layout>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    </repository>
</repositories>

镜像库房装备:阿里云Maven镜像库房装备地址

<mirrors>
    <mirror>
    <!-- 此镜像的仅有标识符,用来差异不同的mirror元素 -->
	<id>nexus-aliyun</id>
    <!-- 对那种库房进行镜像(便是代替哪种库房)-->
	<mirrorOf>central</mirrorOf>
    <!-- 镜像称号 -->
	<name>Nexus aliyun</name>
    <!-- 镜像URL -->
	<url>https://maven.aliyun.com/repository/public</url>
    </mirror> 
</mirrors>

大局setting和用户setting

  • 界说当时计算机中Maven的公共装备,即 mavne装置目录/conf/setting.xml
  • 界说当时用户装备,即 装备的本地库房地址处有个平级的setting.xml

注:用户setting和大局setting不一致时,会优先选用用户setting.xml的装备,因而最好是这二者内容保持一致

Maven项目

手动生成Maven项目

Maven工程目录结构

截屏2021-07-17 下午6.50.36

Maven项目构建指令:Maven构建指令运用mvn最初,后边加功用参数,能够一次履行多个指令,运用空格分隔

mvn compile 	# 编译
mvn clean	 	# 整理
mvn test 		# 测验
mvn package		# 打包
mvn install 	# 装置到本地库房

IDEA生成Maven项目

运用原型创立Maven项目与不运用原型创立Maven项目

例:运用原型创立web项目,挑选archetype-webapp进行项目创立,增加Tomcat插件

<build> 
    <plugins>
        <plugin> 
            <groupId>org.apache.tomcat.maven</groupId> 
            <artifactId>tomcat7-maven-plugin</artifactId> 				
            <version>2.1</version>
            <configuration>
                <port>80</port>
                <path>/</path> 
            </configuration>
        </plugin> 
    </plugins>
</build>

依靠办理

  1. 依靠装备:依靠指的是当时项目运转所需求的jar,一个项目能够设置多个依靠。格局:

    <!--设置当时项目所依靠的一切jar-->
    <dependencies>
      <!--设置详细的依靠-->
      <dependency>
        <!--依靠所属群组id-->
        <groupId></groupId>
        <!--依靠所属项目id-->
        <artifactId></artifactId>
        <!--依靠版别号-->
        <version></version>
        <!--
    		<type>pom</type>
    		<scope>import</scope>
    		只能用在 <dependencyManagement></dependencyManagement> 中
    	-->
        <!--类型:jar 则导入jar包	pom 导入的是一个父模块-->
        <type></type>
        <!--
    		效果域:import 代表把父模块中的jar包导入进来
    		为import时,dependency不参加依靠传递
    				   仅仅把dependency需求的依靠都取过来,像个占位符相同替换了就行
    	-->
        <scope>import</scope>  
      </dependency>
    </dependencies>
    
  2. 依靠传递

依靠具有传递性,包括直接传递和直接传递

直接传递:在当时项目中经过依靠装备树立的依靠联系(A运用B,A和B便是直接传递)

直接传递:被依靠的资源假如依靠其他资源,当时项目直接依靠其他资源(比较拗口,意思是假如A依靠B,而B依靠C,那么A和C之间便是直接传递)

img

依靠传递的抵触问题:

  • 途径优先:当依靠中呈现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依靠时,装备次序靠前的掩盖装备次序靠后的
  • 特别优先:当同级装备了相同资源的不同版别,后装备的掩盖先装备的
  1. 可选依靠

可选依靠指的是对外躲藏当时所依靠的资源

<dependency>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <!--增加下面这一行-->
  <optional>true</optional>
</dependency>
  1. 扫除依靠

扫除依靠指自动断开依靠的资源,被扫除的资源无需指定版别

<dependency>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <exclusions>
    <exclusion>
      <groupId></groupId>
      <artifactId></artifactId>
    </exclusion>
  </exclusions>
</dependency>
  1. 依靠规模

依靠的jar包默许状况能够在任何地方运用,能够经过scope标签设定其效果规模

效果规模:

  • 主程序规模有用(main文件夹规模内)
  • 测验程序规模有用(test文件夹规模内)
  • 是否参加打包(package文件夹规模内)
截屏2021-07-17 下午7.10.15

还有两个:system、import

  • import:依靠项替换为指定 POM 的 <dependencyManagement>中的该依靠项。仅 <dependencyManagement> 部分中 pom 类型的依靠项支撑此规模
  1. 依靠规模传递性:带有依靠规模的资源在传递时,效果规模会受到影响

image-20240621212758397

生命周期与插件

Maven项目构建生命周期描绘的是一次构建进程阅历了多少个事情

image-20240621212937084

Maven对项目构建的生命周期划分为3套

  1. clean:整理作业
  2. default:中心作业,例如编译、测验、打包、布置等
  3. site:发生陈述,发布站点等

clean生命周期:

  • pre-clean:履行一些需求在clean之前完结的作业
  • clean:移除一切上一次构建生成的文件
  • post-clean:履行一些需求在clean之后马上完结的作业

default构建生命周期:compile ——> test-compile ——> test ——> package ——> install

  • validate(校验) 校验项目是否正确而且一切必要的信息能够完结项意图构建进程

  • initialize(初始化) 初始化构建状况,比方设置特点值

  • generate-sources(生成源代码) 生成包括在编译阶段中的任何源代码

  • process-sources(处理源代码) 处理源代码,比方说,过滤恣意值

  • generate-resources(生成资源文件) 生成将会包括在项目包中的资源文件

  • process-resources (处理资源文件) 仿制和处理资源到方针目录,为打包阶段最好预备

  • compile(编译) 编译项意图源代码

  • process-classes(处理类文件) 处理编译生成的文件,比方说对Java class文件做字节码改进优化

  • generate-test-sources(生成测验源代码) 生成包括在编译阶段中的任何测验源代码

  • process-test-sources(处理测验源代码) 处理测验源代码,比方说,过滤恣意值

  • generate-test-resources(生成测验资源文件) 为测验创立资源文件

  • process-test-resources(处理测验资源文件) 仿制和处理测验资源到方针目录

  • test-compile(编译测验源码) 编译测验源代码到测验方针目录

  • process-test-classes(处理测验类文件) 处理测验源码编译生成的文件

  • test(测验) 运用适宜的单元测验结构运转测验(Juint是其中之一)

  • prepare-package(预备打包) 在实践打包之前,履行任何的必要的操作为打包做预备

  • package(打包) 将编译后的代码打包成可分发格局的文件,比方JAR、WAR或许EAR文件

  • pre-integration-test(集成测验前) 在履行集成测验前进行必要的动作。比方说,建立需求的环境

  • integration-test(集成测验) 处理和布置项目到能够运转集成测验环境中

  • post-integration-test(集成测验后) 在履行集成测验完结后进行必要的动作。比方说,整理集成测验环境

  • verify (验证) 运转恣意的查看来验证项目包有用且到达质量规范

  • install(装置) 装置项目包到本地库房,这样项目包能够用作其他本地项意图依靠

  • deploy(布置) 将终究的项目包仿制到长途库房中与其他开发者和项目同享

site生命周期:

  • pre-site 履行一些需求在生成站点文档之前完结的作业

  • site 生成项意图站点文档

  • post-site 履行一些需求在生成站点文档之后完结的作业,而且为布置做预备

  • site-deploy 将生成的站点文档布置到特定的服务器上

插件:插件与生命周期内的阶段绑定,在履行到对应的生命周期时履行对应的插件功用

<build>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.2.1</version>
        <!--履行插件-->
        <executions>
            <!--详细怎样履行-->
            <execution>
                <!--方针:履行什么-->
                <goals>
                    <!--履行jar-->
                    <goal>jar</goal>
                </goals>
                <!--履行到那个生命周期阶段时就要履行该插件	对应前面default中的那些值-->
                <phase>generate-test-resources</phase>
            </execution>
        </executions>
        </plugin>
    </plugins>
</build>

<goal>jar</goal>值选项:官网:Apache Maven Source Plugin

  • source:aggregate aggregrates sources for all modules in an aggregator project.
  • source:jar is used to bundle the main sources of the project into a jar archive——对main中源代码打包
  • source:test-jar on the other hand, is used to bundle the test sources of the project into a jar archive——对测验代码打包
  • source:jar-no-fork is similar to jar but does not fork the build lifecycle.
  • source:test-jar-no-fork is similar to test-jar but does not fork the build lifecycle.

聚合

效果:聚合用于快速构建Maven工程,一次性构建多个项目/模块

制造方法:创立一个空模块,打包类型界说为pom

<packaging>pom</packaging>

界说当时模块进行构建操作时相关的其他模块称号

<modules>
  <module>模块地址</module>
  <module>模块地址</module>
  <module>模块地址</module>
  <module>模块地址</module>
</modules>

留意:参加聚合操作的模块终究履行次序与模块间的依靠联系有关,与装备次序无关

承继

效果:经过承继能够实现在子工程中沿袭父工程中的装备(与Java相似)

制造方法:在子工程中生命其父工程坐标与对应的方位

<!--界说该工程的父工程-->
<parent>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <!--填写父工程的pom文件-->
  <relativePath>父工程pom文件地址</relativePath>
</parent>

在父工程中界说依靠办理

<!--声明此处进行依靠办理-->
<dependencyManagement>
  <!--详细的依靠-->
  <dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId></artifactId>
      <version></version>
    </dependency>
  </dependencies>
</dependencyManagement>



<!--要办理插件的话,运用如下方法-->
<build>
	<pluginManagement>
    	<plugins>
        	<plugin>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
                <!--.....................-->
            </plugin>
        </plugins>
    </pluginManagement>
</build>

承继依靠运用:在子工程中界说依靠联系,无需声明依靠版别,版别参照父工程中依靠的版别

<!--子工程运用依靠-->
<dependencies>
  <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
  </dependency>
</dependencies>


<!--子工程运用插件-->
<build>
    <plugins>
        <plugin>
            <groupId></groupId>
            <artifactId></artifactId>
            <!--<version></version>-->
        </plugin>
    </plugins>
</build>

承继的资源:

image-20240622012647178

承继与聚合的差异

效果:聚合用于快速构建项目,承继用于快速装备

相同点:

  • 聚合与承继的pom.xml文件打包方法均为pom,能够将两种联系制造到同一个pom文件中

  • 聚合与承继均归于规划型模块,并无实践的模块内容

不同点:

  • 聚合是在当时模块中装备联系,聚合能够感知到参加聚合的模块有哪些

  • 承继是在子模块中装备联系,父模块无法感知哪些子模块承继了自己

特点

  1. 自界说特点

效果:等同于界说变量,便利一致保护

界说格局:

<!--界说自界说特点-->
<properties> 
    <spring.version>5.1.9.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
</properties>

调用格局:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${spring.version}</version>
</dependency>
  1. 内置特点

效果:运用Maven内置特点,快速装备

调用格局:

${basedir}
${version}
  1. Setting特点

效果:运用Maven装备文件setting.xml中的标签特点,用于动态装备

调用格局:

${settings.localRepository}
  1. Java体系特点

效果:读取Java体系特点

调用格局:

${user.home}

体系特点查询方法:

mvn help:system
  1. 环境变量特点

效果:运用Maven装备文件setting.xml中的标签特点,用于动态装备

调用格局:

${env.JAVA_HOME}

环境变量特点查询方法:

mvn help:system

版别办理

SNAPSHOT(快照版别):

  • 项目开发进程中,便利团队成员协作,处理模块间相互依靠和实时更新的问题,开发者对每个模块进行构建的时分,输出的临时性版别就叫快照版别(测验阶段版别)
  • 快照版别会跟着开发的发展不断更新

RELEASE(发布版别):

  • 项目开发到进入阶段里程碑后,向团队外部发布较为安稳的版别,这种版别所对应的构建文件是安稳的,即使进行功用的后续开发,也不会改动当时发布版别的内容,这种版别就叫发布版别

工程版别号约好:

截屏2021-07-17 下午8.24.46

资源装备

装备文件引证pom特点

效果:在恣意装备文件中加载pom文件中界说的特点

  1. pom中界说变量:
<properties>
	<jdbc.username>root</jdbc.username>
    <jdbc.password>zixieqing072413</jdbc.password>
</properties>
  1. pom中敞开装备文件加载pom特点
<build>
    <!--装备资源文件对应的信息-->
    <resources>
        <resource>
            <!--设定装备文件对应的方位目录 如 application.yml
			   支撑运用特点动态设定途径	如 ${project.basedir}-->
            <directory>地址</directory>
            <!--敞开对装备文件的资源加载过滤-->
            <filtering>true</filtering>
        </resource>
    </resources>
    
    
    <!--test装备文件也需求运用时:装备资源文件对应的信息-->
    <testResources>
    	<testResource>
            <!--设定装备文件对应的方位目录 如 application.yml
			   支撑运用特点动态设定途径	如 ${project.basedir}-->
            <directory>地址</directory>
            <!--敞开对装备文件的资源加载过滤-->
            <filtering>true</filtering>
        </testResource>
    </testResources>
</build>
  1. 在需求运用变量得到装备文件中运用,调用格局:
${地址}


<!--示例-->
${jdbc.username}

多环境开发装备

<!--创立多环境-->
<profiles>
    <!--界说详细的环境:出产环境-->
    <profile>
        <!--界说环境对应的仅有称号	如 prod_env-->
        <id>开发环境称号1</id>
        <!--界说环境中的专用的特点值-->
        <properties>
            <jdbc.url>jdbc链接</jdbc.url>
        </properties>
        <!--将该套环境设为默许发动环境-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <!--界说详细的环境:开发环境	格局同上-->
</profiles>

Maven运用指令发动那套环境:

mvn 指令 -p 环境界说id

# 示例
mvn install -p prod_env

越过测验

提示

正式开发时,不主张越过

越过测验的场景:

  • 全体模块功用未开发
  • 模块中某个功用未开发结束
  • 单个功用更新调试导致其他功用失利
  • 快速打包
  • .........................

运用方法:

  1. 指令的方法
mvn 指令 –D skipTests

# 示例
mvn install –D skipTests

留意

履行的指令生命周期有必要包括测验环节

  1. 运用IDEA界面操作

image-20240622024041847

  1. 运用pom装备
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <!-- 设置越过测验 -->
        <skipTests>true</skipTests>
        <!-- 包括指定的测验用例 -->
        <includes>
            <include>**/User*Test.java</include>
        </includes>
        <!-- 扫除指定得到测验用例 -->
        <excludes>
            <exclude>**/User*TestCase.java</exclude>
        </excludes>
    </configuration>
</plugin>

私服

运用Nexus,是sonatype的产品:

  • 下载地址1:https://help.sonatype.com/repomanager3/download
  • 下载地址2:https://www.sonatype.com/thanks/repo-oss

发动服务器(Windows):

nexus.exe /run nexus

拜访服务器:默许端口8081,可在其装备文件中修正

http://localhost:8081

修正根底装备信息:装置途径/etc/nexus-default.properties,如默许端口号

修正服务器运转装备:装置途径/bin/nexus.vmoptions,如默许内存空间巨细

IDEA中资源上传和下载

私服库房分类:

宿主库房(hosted):保存无法从中心库房获取的资源,如

  • 自主研制
  • 第三方非开源项目

署理库房(proxy):署理长途库房,经过Nexus拜访其他公共库房

库房组(group):

  • 将若干库房组成一个群组,简化装备
  • 库房组不保存资源,归于规划型库房

image-20240622154257305

私服用户名暗码:装备在本地库房的setting.xml中即可

上传方位:装备在IDEA中,上传到私服中的库房组不同

下载地址:装备在本地库房的setting.xml即可

拜访私服装备

  1. 装备本地库房拜访私服权限(setting.xml)
<servers>
    <server>
        <!--放release版别的	和nexus中命名保持一致-->
        <id>zixq-release</id>
        <!--拜访私服的用户名暗码-->
        <username>admin</username>
        <password>admin</password>
    </server>
    <server>
        <!--放snapshots版别的-->
        <id>zixq-snapshots</id>
        <username>admin</username>
        <password>admin</password>
    </server>
</servers>
  1. 装备本地库房来历(setting.xml)
<!--能够和阿里云库房一起存在-->

<mirrors>
    <mirror>
    <id>nexus-zixq</id>
    <mirrorOf>*</mirrorOf>
	<url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

IDEA发布依靠到私服装备

  1. 装备当时项目拜访私服上传资源的保存方位(pom.xml)
<distributionManagement>
    <repository>
        <!--库房id,和上面本地库房setting.xml中server id保持一致-->
        <id>zixq-release</id>
        <!--放release版库房的url-->
        <url>http://localhost:8081/repository/zixq-release/</url>
    </repository>
    <snapsho

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=322

分享给朋友:

“Maven 收拾” 的相关文章

字节面试:范畴、子域、中心域、通用域和支撑域怎样区分?

字节面试:范畴、子域、中心域、通用域和支撑域怎样区分?

范畴驱动规划(DDD)里边有一堆专业术语,比方范畴、子域、中心域、通用域、支撑域等等,听着是不是觉得挺吓人?别怕,我来带你轻松搞懂它们。 怎么了解范畴和子域? 范畴是指必定的事务规模或问题域。在处理事务问题时,DDD 会将事务范畴进行细分,将问题规模限定在必定的鸿沟内,在这个鸿沟内树立范畴模型,用代...

面向对象特性

面向对象特性

面向对象编程(ObjectOriented Programming,简称OOP)是一种编程范式,它通过对象和类来组织代码。面向对象编程具有以下主要特性:1. 封装(Encapsulation): 封装是将数据(属性)和行为(方法)捆绑在一起,形成一个对象。这样可以隐藏对象的内部实现细节,只暴露...

装饰器设计模式,装饰器设计模式概述

装饰器设计模式,装饰器设计模式概述

装饰器设计模式(Decorator Design Pattern)是一种结构型设计模式,用于动态地添加修改类的功能。它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于对象结构型模式,因为它是作为现有类的一个包装。装饰器模式主要解决的问题是当需要给一个现有的对象添加更多的功...

美工软件设计培训,开启创意设计之旅

美工软件设计培训,开启创意设计之旅

选择合适的美工软件设计培训机构时,可以从以下几个方面进行考虑:1. 了解培训机构的背景和声誉: 选择美工培训机构时,首先要了解其背景和声誉。例如,火星时代教育拥有超过十年的教学经验,在行业内深受好评。2. 课程内容和体系: 确保培训机构提供的内容丰富、结构完整的课程体系。例如,火星时代教...

java设计模式详解,Java设计模式概述

java设计模式详解,Java设计模式概述

设计模式分为三类:创建型模式、结构型模式、行为型模式。 创建型模式创建型模式主要用于创建对象。这类模式的主要特点是将对象的创建过程和对象的使用过程分离,使得对象的创建过程更加灵活,能够根据不同的需求创建出不同的对象。1. 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。...

c语言面向对象编程,理论与实践

c语言面向对象编程,理论与实践

在C语言中,尽管没有像C 或Java那样内建的面向对象编程(OOP)特性,但我们可以通过一些技巧来模拟OOP的概念。这些技巧包括使用结构体(struct)来定义类,使用函数指针来实现类似方法的功能,以及使用函数来模拟继承和多态。下面是一个简单的例子,展示了如何在C语言中模拟面向对象编程:1. 定义...