Maven学习笔记+私服搭建
Posted dingwen_blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven学习笔记+私服搭建相关的知识,希望对你有一定的参考价值。
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务 于 Java 平台的项目构建和依赖管理。
一、install
官网下载指定平台的版本,以windows为例。注意:
maven
依赖java
环境,系统需要配置了JAVA_HOME
-
下载
.zip
文件 -
解压缩
- apache-maven-version
- bin: maven可执行命令
- boot
- conf: 配置文件
- lib
- LICENSE
- NOTICE
- README.txt
- apache-maven-version
-
配置环境变量: 把解压缩的目录
/bin
放到系统变量path
中- 创建系统环境变量:
M2_HOME
或者MAVEN_HOME
- 在
path
中新增:%M2_HOME%\\bin
- 创建系统环境变量:
-
验证安装:
mvn -v
C:\\Users\\Administrator>mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: D:\\file\\apache-maven-3.5.0\\bin\\..
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\\Program Files\\Java\\jdk1.8.0_121\\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
二、maven
基础
2.1 约定的目录结构
- 项目文件夹
- src 源代码目录
- main 主程序目录
- java 代码
- resources 配置文件
- test 测试
- java 测试代码
- resources 测试配置文件
- main 主程序目录
- pom.xml maven核心配置文件
- src 源代码目录
2.2 Project Object Model(POM)
项目对象模型,
maven
通过pom.xml文件实现 项目的构建和依赖的管理
2.3 gav(坐标)
groupId
:组织名称arfiiacId
:项目名称version
: 版本号package
:jar
||war
||ear
||pom
使用组织名称、项目名称、版本号唯一确定一个资源
2.4 dependency(依赖)
项目中要使用的其他资源(jar)。
需要使用maven表示依赖,管理依赖。 通过使用dependency和gav一起完成依赖的使用。需要在pom.xml文件中,使用dependencies 和dependency, 还有gav 完成依赖的说明。maven使用gav作为标识,从互联网下载依赖的jar。 下载到你的本机上。 由maven管理项目使用的这些jar
<dependencies>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2.5仓库
存放工具包的
- 本地仓库: 默认路径:
操作系统的账号的目录中/.m2/repository
2.5.1 修改默认路径
1.创建仓库路径(非中文、非空格)
2.修改配置文件maven安装目录/conf/setting.xml
3. <localRepository>你创建的目录</localRepository>
-
远程仓库
1.中央仓库:一个ftp
服务器,存放着所有的资源
2.中央仓库镜像:中央仓库的拷贝,各大城市都有
3.私服:局域网内自己的仓库 -
工作方式
maven使用仓库: maven自动使用仓库, 当项目启动后, 执行了maven的命令, maven首先访问的是本地仓库, 从仓库中获取所需的jar, 如果本地仓库没有 ,需要访问私服或者中央仓库或者镜像
2.6生命周期
- clean(清理):
mvn clean
删除之前编译的生成的target
目录 - compile(编译):
mvn compile
代码编译 - test(测试):
mvn test
执行编译成功的测试字节码文件 - package(打包):
mvn package
- verify(认证):
mvn verify
认证 - install(安装):
mvn install
将打包的文件安装到本地仓 - site(站点):
mvn site
生成站点 - deploy(部署):
mvn deploy
将项目安装到远程仓库,并运行在web
容器中
2.7 自定义配置插件
> 在pom.xml文件中, build标签中。设置插件
<!-- 设置构建项目相关的内容 -->
<build>
<plugins>
<!-- 设置插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- 指定编译代码的jdk版本 -->
<target>1.8</target> <!-- 运行java程序使用的jdk版本-->
</configuration>
</plugin>
</plugins>
</build>
三、依赖管理
- scope(依赖的范围)
- compile (默认,参与构建项目的所有阶段)
- test (只在测试阶段依赖,例:junit)
- provided(提供者:在项目部署到服务器时不需要这个依赖,有服务器提供。例:jsp、servlet)
四、常用设置
properties
-
作为全局变量使用
-
步骤
- 在
properties
中定义 - ${变量名}引用
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--编译JDK版本--> <maven.compiler.source>1.8</maven.compiler.source> <!--运行JDK版本--> <maven.compiler.target>1.8</maven.compiler.target> <!--自定义变量--> <spring.version>5.2.5.RELEASE</spring.version> </properties> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency>
五、资源插件的使用
- 在
资源插件用来处理配置文件,我们知道
maven
会把所有/src/main/resources/
中的文件拷贝到/target/classes/
下,把/src/main/java/
中的所有.java
文件编译为.class
文件拷贝到/target/classes/
中。
<build>
<!--资源插件
告诉maven把 src/main/java目录中的
指定扩展名的文件 拷贝到 target/classes目录中。
-->
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes>
<!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- filtering 选项 false 不启用过滤器, *.property 已经起到过
滤的作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
六、idea
中使用maven
6.1 初始项目设置
设置项: -DarchetypeCatalog=internal
6.2 新项目默认设置
6.3 使用模板创建项目
七、maven
高级
7.1 依赖传递
在
maven
中你在pom.xml
中直接导入坐标,则这个资源为该项目的直接依赖。如果这个资源也依赖一些其他资源,也会被maven
下载。这里的其他资源就是间接依赖。这个过程叫做依赖传递。
7.2依赖优先原则
- 1.第一声明者优先:在
pom.xml
中定义依赖,先定义的为准 - 2.路径近者优先: 例如当两个资源都依赖同一个资源时,此时在
pom.xml
文件中声明这个依赖资源的路径就更近。
7.3 排除依赖
7.4 锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。
注意:在工程中锁定了版本并没有添加依赖,后面添加依赖的时候可以不写版本号。
7.5 tomcat
插件
<!-- 添加tomcat7插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
7.6 父子工程启动
如果父子工程都是单独可运行的项目,直接启动父工程可以完成启动。当你单独启动某一个模块时,如果当前模块依赖于其他模块此时仓库中并没有这个模块的
jar
包,此时就需要先将所依赖的模块mvn install
。
7.7 依赖范围对传递依赖的影响
是因为依赖会有依赖范围,依赖范围对传递依赖也有影响,例如有 A、B、C,A 依赖 B、B
依赖 C,C 可能是 A 的传递依赖,如下图:
最左边一列为直接依赖,理解为 A 依赖 B 的范围,最顶层一行为传递依赖,理解为 B
依赖 C 的范围,行与列的交叉即为 A 传递依赖 C 的范围。
7.8 继承
继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的配置提取出来在父工程的 pom.xml 中定义。
7.9 聚合
项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在
一起运行,比如:dao、service、web 三个工程最终会打一个独立的 war 运行。
7.10 搭建私服环境
7.10.1 下载地址
7.10.2 Docker 安装
https://blog.csdn.net/qq_38020915/article/details/117514387
7.10.3 仓库类型
- hosted: 本地仓库
- releases: 发行版
- snapshots: 快照版
- 3rd party: 第三方库
- proxy: 代理仓库,代理远程的公共仓库
- group: 仓库组,用来合并多个hosted、proxy
7.10.4 部署到私服
-
配置
<properties> <nexus.base.server>http://192.168.233.130:8888</nexus.base.server> </properties> <distributionManagement> <repository> <id>maven-releases</id> <url>${nexus.base.server}/repository/maven-releases/</url> </repository> <snapshotRepository> <id>maven-snapshots</id> <url>${nexus.base.server}/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
-
maven 配置文件
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 本地仓库的路径。默认值为${user.home}/.m2/repository。 --> <localRepository>E:/repositoryNew</localRepository> <pluginGroups> <pluginGroup>org.codehaus.cargo</pluginGroup> </pluginGroups> <servers> <server> <id>maven-releases</id> <username>admin</username> <password>123456</password> </server> <server> <id>maven-snapshots</id> <username>admin</username> <password>123456</password> </server> <!--第三方jar导入--> <server> <id>thirdparty</id> <username>admin</username> <password>123456</password> </server> </servers> <!--备选镜像配置--> <mirrors> <!-- 阿里云 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <!-- 华为云 --> <mirror> <id>huaweicloud</id> <mirrorOf>*</mirrorOf> <url>https://mirrors.huaweicloud.com/repository/maven/</url> </mirror> <mirror> <id>maven-releases</id> <mirrorOf>*</mirrorOf> <url>http://192.168.233.130:8888/repository/maven-releases/</url> </mirror> <mirror> <id>maven-snapshots</id> <mirrorOf>*</mirrorOf> <url>http://192.168.233.130:8888/repository/maven-snapshots/</url> </mirror> </mirrors> <profiles> <profile> <!--profile 的 id--> <id>dev</id> <repositories> <repository> <!--仓库 id,repositories 可以配置多个仓库,保证 id 不重复--> <id>nexus</id> <!--仓库地址,即 maven-snapshots 仓库组的地址--> <url>http://192.168.233.130:8888/repository/maven-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://192.168.233.130:8888/repository/maven-public/</url> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles> </settings>
-
上传直接去第三方直接去管理端操作,
server
指定第三方用户 -
下载根据以上配置引入坐标即可
以上是关于Maven学习笔记+私服搭建的主要内容,如果未能解决你的问题,请参考以下文章