Maven是什么? 不知道你可就亏大发了!

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
云防火墙,500元 1000GB
简介: Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。

@TOC

一、Maven介绍

Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的 缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项 目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且 公司项目采用 Maven 的比例在持续增长。

Maven和ANT区别

Ant 是软件构建工具,Maven 的定位是软件项目管理和理解工具。Maven 除了具备 Ant 的功能外,还增加了以下主要的功能:
1)使用 Project Object Model 来对软件项目管理;
2)内置了更多的隐式规则,使得构建文件更加简单;
3)内置依赖管理和 Repository 来实现依赖的管理和统一存储;
4)内置了软件构建的生命周期

目前,绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是, Ant 的项目管理工具(作为 make 的替代工具)不能满足绝大多数开发人员的需要。通过检查 Ant 构建文件,很难发现项目的相关性信息和其它信息(如开发人员/拥有者、版本或站 点主页)。

Maven的下载与IDE的整合

下载地址1

在这里插入图片描述

Eclipse整合Maven

整合步骤

1、找到该软件的bin目录(最好是硬盘中的根目录)

在这里插入图片描述

2、指定Maven配置文件

在User setting中找到maven的setting.xml,点击Update Setting然后apply。

注:为了今后方便修改,可以将setting.xml从maven中的conf文中移动到根目录下,如上图。只需要点击 Update Setting即可关联配置文件。

在这里插入图片描述

二、Maven仓库与配置

Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服务。

仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全 相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。

对于 Maven 来说,仓库分为两类:本地仓库和远程仓库。

远程仓库

远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.org 和 uk.maven.org 是 Maven 的中央仓库)。

其它“远程”仓库可能是你的公司拥有的建立在文件 或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。

本地仓库

本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。

仓库配置

本地仓库配置(setting.xml)

创建一个本地仓库,并指定本地仓库的目录.
在这里插入图片描述

镜像仓库配置(setting.xml)

在这里插入图片描述

<mirror>            
        <!-- 指定镜像 ID -->   
        <id>nexus-aliyun</id>          
        <!-- 匹配中央仓库。 -->   
        <mirrorOf>central</mirrorOf>   
        <!-- 指定镜像名称 -->       
        <name>Nexus aliyun</name>   
        <!-- 指定镜像路径 -->   
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>    
</mirror>

仓库优先级问题

本地仓库,镜像仓库,中央仓库。 镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。

仓库访问优先级:
1、本地仓库 :第一访问本地仓库。
2、 指定仓库 :第二优先级
3、远程仓库
        镜像仓库:镜像仓库是 Maven 开发过程中的首选远程仓库,在本地仓库和指定仓库无法获取资源 的时候,直接访问镜像仓库。
        中央仓库:如果镜像仓库不是中央仓库 ,则会在访问镜像仓库无法获取资源后,访问中央仓库。

三、Maven工程的创建

Maven工程的类型

POM工程

POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。

JAR工程

将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。

WAR工程

将会打包成 war,发布在服务器上的工程。如网站或服务。即常见的网络工程 (Dynamic Web Project)。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,,IDE 通常会显示工程错误,需要自行配制缺失目录和文件来解决解决。

创建Maven项目

New--> other -->Maven Project

在这里插入图片描述

在这里插入图片描述

填写项目信息(点击next以后)

Group Id 公司域名倒写
Artifact Id 项目名
Version 版本名
Packaging 项目类型
    Jar java 项目
    War : web 项目
    POM: 父项目.如果项目有子项目,项目必须是 pom
Name : 自定义名称,内容任意
Description: 描述.详细描述.
Parent Project: 如果当前项目有父项目时填写

四、Maven项目结构

src/main/java : 这个目录下储存 java 源代码
src/main/resources : 储存主要的资源文件。比如spring的xml配置文件和log4j的properties 文件。
src/test/java : 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面
src/test/resources : 储存测试用的资源文件
src : 包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
target : 编译后内容放置的文件夹
pom.xml : 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等 等

工程关系

依赖

即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种 情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系

实例

创建了两个Jar java 类型的项目,主要区别在于他们的pom.xml的配置

在这里插入图片描述

被依赖的程序.xml配置
<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>
  <groupId>com.bjsxt</groupId>
  <artifactId>Maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build/>
  </dependencies>
</project>
依赖的程序.xml配置
<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>
  <groupId>com.bjsxt</groupId>
  <artifactId>01MavenDemo2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build/>
      
      <dependencies>
          <dependency>
          <groupId>com.bjsxt</groupId>
          <artifactId>Maven</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          </dependency>
      </dependencies>
</project>
依赖的maven程序可以使用被依赖程序所创建的类,可以通过对象的形式直接调用这些类

继承

父工程配置

在这里插入图片描述
pom.xml

<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>
  <groupId>com.bjsxt</groupId>
  <artifactId>03parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <build/>    
      <properties>
        <junit-version>4.3</junit-version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

子工程配置

在这里插入图片描述
pom.xml

<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>
  <parent>
    <groupId>com.bjsxt</groupId>
    <artifactId>03parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.bjsxt</groupId>
  <artifactId>04son</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build/>
  <dependencies>
      <dependency>
          <groupId>junit</groupId>
        <artifactId>junit</artifactId>
      </dependency>
  </dependencies>
</project>
继承的maven程序可以使用被继承的程序所导入的jar包,并实现版本控制

聚合

创建聚合项目

在这里插入图片描述

创建聚合模块

右击聚合项目,点击new->other

在这里插入图片描述

项目截图

标题

聚合模块的POM文件

<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>
  <groupId>com.bjsxt</groupId>
  <artifactId>04Maven-Manager</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <build/>
  <modules>
      <module>04Maven_sub1</module>
      <module>04Maven_sub2</module>
  </modules>
</project>

创建war类型的项目(web项目)

步骤
1、新建一个maven项目, 工程类型选择为war项目
2、在webapps目录下创建WEB-INF目录
3、在WEB-INF目录下创建web.xml文件,并添加相应代码
4、目项目报错,更新项目(右击项目-》maven-》update project )

Maven : 常见命令

(1) Install命令 :安装项目到本地仓库
(2) Clean命令: 清理maven项目
(3) Compile命令 : 编译源代码
(4) Deploy命令 : 发布项目到远程仓库
(5) Package命令 : maven 打包

更多请见: https://zhuanlan.zhihu.com/p/29208926

五、Maven常见的插件

1、编译器插件(动态配置jdk)

pom.xml配置片段

一次配置,一次生效
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

在setting.xml配置全局编译器插件

一次配置,一直生效

在这里插入图片描述

<profile>   
        <!-- 定义的编译器插件 ID,全局唯一 -->   
            <id>jdk-1.7</id>   
            <!-- 插件标记,activeByDefault 默认编译器,jdk 提供编译器版本 -->   
            <activation>    
                <activeByDefault>true</activeByDefault>    
                <jdk>1.7</jdk>   
            </activation>   
            <!-- 配置信息 source-源信息,target-字节码信息,compilerVersion-编译过程版 本 -->   
            <properties>    
                    <maven.compiler.source>1.7</maven.compiler.source>    
                    <maven.compiler.target>1.7</maven.compiler.target>    
                    <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>   
            </properties>  
 </profile> 

2、tomcat管理插件

本地应用

使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。应用启 动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中 的具体功能。具体 pom.xml 文件的配置如下:
 <build>
  <!-- 配置tomcat插件 -->
      <plugins>
          <plugin>
              <groupId>org.apache.tomcat.maven</groupId>         
              <artifactId>tomcat7-maven-plugin</artifactId>         
              <version>2.2</version>         
                  <configuration>           
                      <port>8848</port>           
                      <path>/</path>         
                  </configuration>    
          </plugin>
      </plugins>
  </build>

远程热部署

远程热部署是指,在 Tomcat 容器运行过程中,动态实现 war 工程的部署,重新部署功能。使用 maven build 功能实现,具体命令为: tomcat7:deploy或 tomcat7:redeploy。其中 deploy 代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部署同名 war 工程。

实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验证方式。 实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访问用户,所以在 Tomcat 中也需提供部分配置。 如果是上传到本地只需要写在configuration下加上path(访问路径)以及port(端口号)
具体配置(pom.xml)内容如下:

<plugins>
        <!-- 配置 Tomcat 插件 -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <!-- path: 上传的 war 包解压后的路径命名 -->
                <path>/ROOT</path>
                <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 -->
                <url>http://192.168.179.128:8080/manager/text</url>
                <!-- 为 tomcat 配置的管理用户名和密码.如果设置后该步骤可省略 -->
                <username>admin</username>
                <password>admin</password>
            </configuration>
        </plugin>
    </plugins>

3、资源拷贝插件

实现在打包时自动拷贝java目录下以及resources目录下的xml的配置文件
 <!-- 资源拷贝插件,实现在打包时自动拷贝java目录下以及resources目录下的xml的配置文件 -->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>

六、私服

介绍

私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程仓库,供局域网使用。

作用
节省资金,外网带宽
加速Maven的构建
部署第三方构件
提高稳定性,增强控制
降低中央仓库的复合

搭建

搭建环境

环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse)

搭建步骤

1、安装JDK

JDK 官方下载地址为: http://www.oracle.com/technetwork/java/javase/downloads/index.html 本课程使用版本为 JDK1.7。(jdk-7u80-linux-x64.tar.gz) 附件也有。

2、JDK资源解压

在 Linux 中安装应用的常用目录为:/opt 或/usr/local 目录。本课件将 JDK 安装到 /usr/local/java 目录中。
解压 JDK 到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local 
重命名 JDK 目录: 
mv /usr/local/jdk1.7.0_80 /usr/local/java 

3、环境变量配置

修改/etc/profile 配置文件,增加环境变量配置。 环境变量修改后,可以重启 Linux 实现永久生效;或执行 source /etc/profile 命令,让新 修改的环境变量在当前终端中生效。
export JAVA_HOME=/usr/local/java 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$JAVA_HOME/bin:$PATH 

4、安装Nexus

Nexus 官方下载地址为: https://www.sonatype.com/nexus-repository-oss 本课件应用版本为:nexus-2.11.2-03

5、 Nexus 资源包解压

在/usr/local 目录中创建子目录 
nexus: mkdir /usr/local/nexus 
解压 Nexus 到指定目录: 
tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus Nexus 
压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-work nexus-2.11.2-03 是具体的私服应用内容,sonatype-work 是 Nexus 私服下载的构件存放工 作目录。

6、 检查私服端口和工作目录

在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看 nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。配置文 件内容如下:
# Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。 
application-port=8081   # 私服访问端口 
application-host=0.0.0.0 
nexus-webapp=${bundleBasedir}/nexus   # Nexus 私服 WEB 应用所在位置 
nexus-webapp-context-path=/nexus   # Nexus 私服 WEB 应用 contextPath 
# Nexus section Nexus 私服配置信息 
nexus-work=${bundleBasedir}/../sonatype-work/nexus  # 私服工作目录,即构件保存目
录 
runtime=${bundleBasedir}/nexus/WEB-INF  # 私服 WEB 应用运行目录 
 

7、修改 Nexus 运行用户

Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。 Nexus的启动脚本文件中,可以指定私服应用的访问用户,此信息在nexus-2.11.2-03/bin/nexus 脚本文件中定义。需要修改的信息如下:
# NOTE - This will set the user which is used to run the Wrapper as well as 
#  the JVM and is not useful in situations where a privileged resource or 
#  port needs to be allocated prior to the user being changed. 
#RUN_AS_USER=    #原内容 
RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。 

8、修改防火墙,开放私服访问(或者每次使用时都关闭防火墙)

修改防火墙配置文件,开放 Nexus 私服的访问端口 8081(2.2.2.3 章节内容)。 vi /etc/sysconfig/iptables 增加下述内容:
vi /etc/sysconfig/iptables
增加下述内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
重新启动防火墙: service iptables restart
关闭防火墙: service iptables stop

9、访问客户端
http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP),访问效果如下:
Nexus 默认提供管理用户,用户名为 admin,密码为 admin123
在这里插入图片描述

仓库类型简介

在这里插入图片描述
仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组管理的多个仓库。
宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。
代理仓库:代理公共的远程仓库。
虚拟仓库:用于适配 Maven

链接:https://pan.baidu.com/s/1GPiv8TFKPgz5Qhlh_VFRzg
提取码:kj9u
复制这段内容后打开百度网盘手机App,操作更方便哦
或者通过官方网址自行下载 http://maven.apache.org/


  1. 需要的相关文件已经分享至本人百度云
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
存储 Java Apache
|
6月前
|
存储 Java 应用服务中间件
|
6月前
|
Java Maven 索引
|
XML Java Maven
Gradle VS Maven后,发现Gradle贼好用!开始嫌弃Maven了...
Gradle VS Maven后,发现Gradle贼好用!开始嫌弃Maven了...
224 1
|
Java jenkins 持续交付
jenkinsのMaven项目构建
jenkinsのMaven项目构建
56 0
|
IDE Java 测试技术
史上最详细的Maven使用笔记(建议收藏)
Maven 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 温馨提示:如果需要详细的线下笔记,PDF文件方便保存,可以关注公众号“程序员小王”回复“maven”领取PDF版本笔记
470 0
史上最详细的Maven使用笔记(建议收藏)
|
Java 测试技术 Maven
maven编译速度火力全开
跳过单元测试 开启多线程编译 每核增加一个线程进行构建
177 0
|
Java 程序员 Maven
【JavaWeb】带你走进Maven
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
71 0
|
Java 程序员 Linux
|
XML 缓存 Java
不好意思, Maven 该换了!
不好意思, Maven 该换了!
301 0
不好意思, Maven 该换了!