首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven学习笔记

Maven学习笔记

作者头像
时间静止不是简史
发布2020-07-27 10:18:53
1.1K0
发布2020-07-27 10:18:53
举报
文章被收录于专栏:Java探索之路Java探索之路

一、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.orguk.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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Maven介绍
  • Maven和ANT区别
  • Maven的下载与IDE的整合
  • 下载地址1
  • Eclipse整合Maven
    • 整合步骤
    • 二、Maven仓库与配置
      • 远程仓库
        • 本地仓库
          • 仓库配置
            • 本地仓库配置(setting.xml)
            • 镜像仓库配置(setting.xml)
            • 仓库优先级问题
        • 三、Maven工程的创建
          • Maven工程的类型
            • POM工程
            • JAR工程
            • WAR工程
          • 创建Maven项目
            • 填写项目信息(点击next以后)
        • 四、Maven项目结构
          • 工程关系
            • 依赖
            • 继承
            • 聚合
          • 创建war类型的项目(web项目)
            • Maven : 常见命令
            • 五、Maven常见的插件
              • 1、编译器插件(动态配置jdk)
                • pom.xml配置片段
                • 在setting.xml配置全局编译器插件
              • 2、tomcat管理插件
                • 本地应用
                • 远程热部署
              • 3、资源拷贝插件
              • 六、私服
                • 介绍
                  • 搭建
                    • 搭建环境
                    • 搭建步骤
                    • 仓库类型简介
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档