JAVA进阶之maven

Maven简介

简介
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM,Project Object Model)概念,Maven利用一个中央仓库能管理一个项目的构建、报告和文档等步骤。
官网地址:http://maven.apache.org/

Maven核心功能
Maven主要有两大核心功能:
1. 依赖管理。(jar包的管理)
2. 项目构建。(清理、编译、单元测试、打包、安装、部署、运行)

Maven环境配置

下载Maven库

下载地址:http://maven.apache.org/download.cgi
使用版本:apache-maven-3.5.0

配置Maven环境变量
1.右键我的电脑(或者计算机)-属性-高级系统设置-高级-环境变量-系统变量-新建MAVEN_HOME,值为maven的安装目录
2.把%MAVEN_HOME%\bin;追加到Path变量的值后面
3.检验是否成功:cmd-> mvn -v 或 mvn -version
4.修改配置文件:maven安装目录下conf目录中settings.xml

配置Maven仓库
Maven使用仓库管理各种jar包和插件。

Maven仓库分为:本地仓库(local)、远程仓库(remote)两大类

本地仓库: 本地电脑中的仓库。默认位置为: ${user:home}/.m2/repository

远程仓库: 远程仓库又包括:中央仓库+私服+其它公共远程仓库 (比如阿里、163等)

在maven的conf目录中找到

<!--第一个位置在根节点下添加本地仓库位置-->
<localRepository>D:\Repositories\Maven</localRepository>

<!--第二个位置,在mirrors节点下添加 中央仓库镜像-->
 <mirror>
	      <id>alimaven</id>
	      <name>aliyun maven</name>
	      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	      <mirrorOf>central</mirrorOf>       
 </mirror> 
<!--第三个位置,在profiles节点下添加 jdk版本全局配置,因为默认为1.5-->
<profile>  
        <id>jdk18</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>

检索顺序:先检索本地仓库--再检索远程仓库--最后检索中央仓库

Maven入门

Maven程序目录结构
手动创建:

maven_hello	
 ----src
 -------main
 ----------java
 -------------com
 -----------------qf
 --------------------Hello.java
    	   resources
    	   webapp (web项目)
 -------test
 ----------java
 -------------com
 -----------------qf
 -------------------test
 ----------------------HelloTest.java
 ----------resources
 -----pom.xml	
 src/main/java:存放项目的.java文件
 src/main/resources:存放项目资源文件。如配置文件
 src/test/java:存放所有测试的.java文件.如Junit测试类
 src/test/resources:测试资源文件
 【target:项目输出位置(可以自动生成)】
 pom.xml(maven项目核心配置文件)

pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

  	<!--组织id com.qf.maven   GAV坐标 -->
    <groupId>com.qf.maven</groupId>
	<!--项目名 模块名-->
    <artifactId>maven_hello</artifactId>
	<!--项目版本  SNAPSHOT 快照 不稳定版本  RELEASE 发布版 稳定-->
    <version>1.0-SNAPSHOT</version>
	<!--打包形式  jar包-->
    <packaging>jar</packaging>
	<!--依赖-->
	<dependencies>
		<dependency>
		  <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.12</version>
		  <scope>test</scope>
		</dependency>
	</dependencies>
</project>

Maven常见命令

Maven的另一个核心功能是项目构建。

构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。

clean

mvn clean:清理(删除)编译的文件
使用插件:maven-clean-plugin:2.5:clean

compile
mvn compile:编译主目录的文件
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile

test

mvn test: 编译并运行test目录的代码
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test

package
mvn package:打包项目,jar包或war包
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar

install
mvn install:安装到仓库
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar
maven-install-plugin:2.4:install

mvn deploy:部署,部署到私服
mvn tomcat:run:运行

Maven构建生命周期
  1. Clean:项目构建前的清理操作
  2. Default(Build): 核心生命周期核心过程:编译,测试,运行,打包等等
  3. Site:项目站点文档创建。

Maven POM文件

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM 中可以指定以下配置:
项目依赖
插件
执行目标
项目构建 profile
项目版本
项目开发者列表
相关邮件列表信息

所有 POM 文件都需要 project 元素和三个必需元素:groupId,artifactId,version。这个必须元素叫做坐标(GAV)

Maven引入外部依赖
pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。

<dependencies>
  		<!--坐标GAV-->
		<dependency>
		  <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.12</version>
		  <scope>test</scope>
		</dependency>
</dependencies>

依赖替代jar包
https://mvnrepository.com/(搜索所需依赖)

Maven传递依赖

当项目依赖一个jar包时,与这个jar包关联的其他jar包也会关联到当前项目,这种现象就是传递依赖。
比如A项目依赖B项目,B又依赖C项目, 此时A中也包含了C的依赖。

依赖传递出现的问题

依赖传递出现的问题: 经常出现jar包冲突,
解决方案:1 直接排除指定的jar包 2版本号限定原则

解决jar包冲突的方式(4种)

1 排除原则(常用)

<exclusions>
           <exclusion>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
           </exclusion>
</exclusions>

2 版本号限定原则(常用)

<properties>
    <mysql.version>5.1.42</mysql.version>
</properties>

<!--02版本锁定-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  <!-- 依赖管理 -->
  <dependencies>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
  </dependencies>

3 路径就近原则(基本不用)
4 第一声明优先原则(基本不用)

私服

​ 正式开发时,不同的项目组开发不同的工程。dao工程开发完毕,发布到私服。service从私服下载dao。

​ 公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。

搭建私服环境

下载nexus
Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/

安装nexus

cmd进入bin目录,执行nexus.bat install

卸载nexus

cmd进入nexus的bin目录,执行:nexus.bat uninstall

启动nexus

方法1:
cmd进入bin目录,执行nexus.bat start
方法2:
windows服务中直接启动nexus服务

私服仓库类型

nexus的仓库有4种类型:

  1. hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
  2. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。
  3. group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
  4. virtual(虚拟):兼容Maven1 版本的jar或者插件
    nexus仓库默认在sonatype-work目录中:

将项目发布到私服

1. 把dao模块上传到私服(如果上述setting.xml文件中配置过再次检查是否配置完整正确):
    第一步:配置私服地址 
            1. 在settings.xml添加:
          <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文件添加:
		  <!-- 配置远程发布到私服,mvn deploy -->
              <distributionManagement>
                    <repository>
                        <id>releases</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>
    第二步: 运行 deploy命令,不同开发工具会有差异。
    
    如果所有配置正确,发现上传私服失败,需要进入私服找到指定仓库 
         Repository--- Access Settings--Deployment Policy修改为允许发布

从私服下载jar包

3.service模块从私服下载dao包
        1.1、在settings.xml文件中
       <profile>
        <id>dev</id>
        <repositories>
            <repository>
                <id>nexus</id>
                <name>nexus</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <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>
    2.激活私服
		<!-- 激活 -->
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>
          
注意:
    私服一般安装在内网的其他服务器上,而不是本机上。因此上面的配置中localhost的部分在实际情况中应该修改为公司中内网的私服服务器地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值