maven 本地打包

文章目录

  • 1. 简介
    • Maven和POM的基本概念
    • 本地打包的意义和场景
  • 2. Maven POM 文件结构
    • POM 文件的基本结构
    • 重要的POM元素介绍
  • 3. Maven 本地打包的关键配置
    • spring-boot-maven-plugin
    • maven-surefire-plugin的作用和配置
      • 如何配置和使用Maven Surefire插件
      • skip 页签
    • maven-compiler-plugin的作用和配置
      • 如何配置和使用Maven Compiler插件
      • source 和 target 页签
      • encoding 页签
      • compilerArguments 页签
    • maven-war-plugin的作用和配置
      • 如何配置和使用Maven War插件
      • resourceEncoding 页签
      • webResources 页签
  • 4.实战:POM本地打包
      • 执行打包命令
      • 验证打包结果
  • 进一步的学习资源

1. 简介

Maven和POM的基本概念

Maven 是一个强大的构建工具,广泛用于 Java 项目的构建和管理。它不仅可以用于构建和打包,还可以用于依赖管理、项目文档生成、项目报告生成等。

POM(Project Object Model)是 Maven 的核心,它是一个 XML 文件,定义了项目的基本信息、构建规则、依赖关系等。通过 POM,我们可以简洁地描述出项目的构建过程。

<project><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.app</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version>
</project>

上面的 POM 文件定义了一个最简单的 Maven 项目,包括项目的组织信息、项目的唯一标识符和版本号。

本地打包的意义和场景

本地打包,即在本地环境中将项目打包成为一个可执行的文件(如 JAR、WAR 或 EAR 文件)。这个过程通常包括编译源代码、运行测试、生成文档和打包等步骤。

本地打包的主要场景包括:

  • 使用本地jar包:有一些jar包并没有在远程仓库里,比如公司私有的jar包,需要通过maven来管理打包

  • 在本地环境中测试和验证项目:通过本地打包,我们可以在本地环境中快速运行和测试项目,验证项目的功能和性能。

  • 为部署做准备:通过本地打包,我们可以生成可部署的文件,然后将这个文件部署到生产环境中。

  • 分享和分发项目:通过本地打包,我们可以生成一个包含了项目所有代码和资源的文件,方便分享和分发。

2. Maven POM 文件结构

POM 文件的基本结构

POM (Project Object Model) 文件是 Maven 项目的核心配置文件。它使用 XML 格式来描述项目的基本信息、依赖关系、构建配置等。下面是一个 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.example</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- dependencies go here --></dependencies><build><!-- build configuration goes here --></build>
</project>

重要的POM元素介绍

1. modelVersion: 这是 POM 模型的版本,当前版本为 4.0.0,这是一个固定的值。

2. groupId, artifactId, version (GAV): 这三个元素组合起来用于唯一地标识一个 Maven 项目:

  • groupId: 定义了当前 Maven 项目所属的组或者说是项目的唯一标识。通常是公司或组织的域名反写,如 com.example。

  • artifactId: 定义了当前 Maven 项目在组中的唯一名字。通常是项目的名字,如 my-app。

  • version: 定义了当前 Maven 项目的版本号。

3. dependencies: 这个元素用于定义项目的依赖关系。每一个依赖都是一个 dependency 元素,包含了依赖项目的 GAV 信息。

4. build: 这个元素用于定义项目的构建配置,例如源代码目录、目标代码目录、插件配置等。

3. Maven 本地打包的关键配置

在Maven的POM文件中,插件(plugins)扮演着非常重要的角色。插件提供了一种方式来扩展Maven的功能,包括编译、测试、打包等。下面我们将介绍几个用于本地打包的关键插件。

spring-boot-maven-plugin

spring-boot-maven-plugin是一个为Spring Boot应用提供的Maven插件。它的主要功能是将Spring Boot应用打包成一个可执行的JAR文件。这个JAR文件包含了所有的依赖、类和资源,并且它可以直接运行,不需要额外的服务器容器。

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

maven-surefire-plugin的作用和配置

Maven Surefire插件是Maven项目中一个非常重要的插件,它主要用于执行项目的单元测试,并生成相应的测试报告。它支持多种流行的测试框架,如JUnit,TestNG等。

当你运行mvn test命令时,Maven会自动执行项目中的单元测试,并通过Surefire插件生成测试报告。这是一个非常重要的步骤,因为它可以帮助你快速发现和修复代码中的问题。

如何配置和使用Maven Surefire插件

Maven Surefire插件的配置非常简单,你只需要在pom.xml文件的<plugins>标签中添加如下配置:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><!-- 插件配置项 --></configuration>
</plugin>

<configuration>标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<includes><excludes>标签来指定哪些测试类或测试方法应该被执行,哪些应该被忽略。

skip 页签

在Maven Surefire插件的配置中,<skip>标签用于控制是否跳过测试。如果你设置<skip>true</skip>,那么在执行mvn test命令时,Maven将不会执行任何测试,也就不会生成测试报告。

这个配置项在某些情况下非常有用。例如,当你正在进行开发,并且想要快速构建项目而不执行测试时,你可以设置<skip>true</skip>。然后,当你准备提交代码时,你可以将其设置回false,以确保所有的测试都被执行。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration>
</plugin>

在POM文件中,我们可以配置maven-surefire-plugin来指定测试框架、测试类、测试方法等。

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><!-- specify test classes --><includes><include>**/*Test.java</include></includes></configuration></plugin></plugins>
</build>

maven-compiler-plugin的作用和配置

Maven Compiler插件的主要作用是编译项目的源代码。当你运行mvn compile命令时,Maven会自动执行项目中的源代码编译,并将编译后的.class文件放到target/classes目录下。

如何配置和使用Maven Compiler插件

Maven Compiler插件的配置相对简单,你只需要在pom.xml文件的<plugins>标签中添加如下配置:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!-- 插件配置项 --></configuration>
</plugin>

<configuration>标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<source><target>标签来指定Java的源代码和目标代码版本,通过<encoding>标签来指定源代码的编码格式。

source 和 target 页签

<source><target>标签用于指定Java的源代码和目标代码版本。在这里,<source>1.8</source>表示源代码是1.8版本的Java代码,<target>1.8</target>表示编译后的.class文件需要运行在1.8版本的Java环境中。

encoding 页签

<encoding>标签用于指定源代码的编码格式。在这里,<encoding>UTF-8</encoding>表示源代码是UTF-8编码的。

compilerArguments 页签

<compilerArguments>标签用于传递一些特定的编译器参数。在这个例子中,<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>配置了额外的类路径,这意味着编译器会在这个路径下查找类文件。

maven-war-plugin的作用和配置

Maven War插件的主要作用是将Web应用程序打包成一个WAR文件,这个WAR文件可以被部署到任何支持Java EE的Web服务器或应用服务器上,如Tomcat,Jetty,GlassFish等。当你运行mvn packagemvn install命令时,Maven会自动使用War插件将你的项目打包成WAR文件。

如何配置和使用Maven War插件

Maven War插件的配置也是在pom.xml文件的<plugins>标签中进行。一个基本的配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><!-- 插件配置项 --></configuration>
</plugin>

<configuration>标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<warName>标签来指定生成的WAR文件的名称,通过<webResources>标签来配置Web资源的处理方式。

resourceEncoding 页签

<resourceEncoding>标签用于指定Web资源文件的编码格式。在这里,<resourceEncoding>UTF-8</resourceEncoding>表示Web资源文件是UTF-8编码的。这是非常重要的,因为如果你的Web资源文件包含非ASCII字符(如中文),那么你需要确保它们被正确地编码和解码。

webResources 页签

<webResources>标签用于配置Web资源的处理方式。你可以在这个标签中指定一些资源目录,并定义这些资源目录的处理规则。例如,你可以指定某些资源目录下的文件需要经过过滤处理,或者指定某些资源文件需要被排除。

一个基本的<webResources>配置如下:

<webResources><resource><directory>src/main/webapp</directory><filtering>true</filtering></resource>
</webResources>

在这个配置中,我们指定了src/main/webapp目录作为Web资源目录,并开启了过滤功能。这意味着在构建过程中,Maven会对这个目录下的文件进行过滤处理,替换其中的占位符。

maven-war-plugin是用于生成WAR文件的Maven插件。WAR文件是一种Web应用程序归档文件,它包含了JSP、Servlet、XML、HTML、图片和其他Web资源。我们可以将WAR文件部署到任何支持Java的Web服务器或应用服务器上。

4.实战:POM本地打包

<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><!--配置本地jar包在项目的存放路径--><compilerArguments><extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs></compilerArguments></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><resourceEncoding>UTF-8</resourceEncoding><webResources><resource><!--配置本地jar包在项目中的存放路径--><directory>src/main/webapp/WEB-INF/lib/</directory><!--配置打包时jar包的存放路径--><targetPath>WEB-INF/lib</targetPath><includes><include>**/*.jar</include></includes></resource></webResources></configuration></plugin>
</plugins>

执行打包命令

一旦POM文件和插件配置完成,我们就可以执行Maven的打包命令了。在命令行中,我们可以运行以下命令来打包项目:

mvn clean package

这个命令将会清理之前的构建结果,然后编译、测试(如果没有被跳过的话)和打包项目。

验证打包结果

执行完打包命令后,我们可以在target目录下找到生成的JAR或WAR文件。我们可以检查这个文件来验证打包是否成功。例如,我们可以使用jar命令(对于JAR文件)或unzip命令(对于WAR文件)来查看文件的内容。

此外,如果我们在maven-compiler-pluginmaven-war-plugin的配置中指定了本地jar包的路径,我们也应该在打包结果中看到这些jar包。

进一步的学习资源

  • Apache Maven官方文档:这是Maven的官方文档,包含了关于Maven的所有信息。
  • Spring Boot Maven Plugin参考指南:这是Spring Boot Maven插件的官方参考指南,详细介绍了插件的各种配置和用法。
  • Maven Surefire Plugin官方文档:这是Maven Surefire插件的官方文档,包含了关于插件的详细信息。
  • Maven Compiler Plugin官方文档:这是Maven Compiler插件的官方文档,包含了关于插件的详细信息。
  • Maven WAR Plugin官方文档:这是Maven WAR插件的官方文档,包含了关于插件的详细信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win32和c++11多线程

Win32和c11多线程 一、概念1.线程的特点线程内核对象线程控制块线程是独立调度和分派的基本单位共享进程的资源 2.线程的上下文切换引起上下文切换的原因 3.线程的状态 二、Windows多线程API1.CreateThread创建线程2.获取线程ID3.关闭线程句柄4.挂起线程5.恢复线程6.休眠线程的…

算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

​大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题&#xff0c;如下&#xff0c; 【问】神经元、权重、激活函数、参数、图片尺寸&#xff0c;卷…

手机相册的排列方式探讨

不论你是不是程序员&#xff0c;你一定留意过一个问题&#xff1a;相册 App 基本都将图片裁剪成了居中的 1:1 正方形。那么手机相册 App&#xff0c;为什么要将图片切割成 1:1 正方形&#xff0c;然后以网格排列&#xff1f;是行业标准吗&#xff1f; 自适应图片宽度的图库&a…

vscode 离线下载指定版本插件和安装方法

1、背景 由于不同的vscode版本需要安装对应的插件版本&#xff0c;一般情况下&#xff0c;vscode版本会落后于vscode插件库提供的可以下载的插件版本&#xff0c;网页一般只会提供最新的插件下载版本&#xff0c;因此我们需要下载指定的版本需要采取一些措施。 2、获取需要安…

c语言速成系列指针上篇

那么这一篇文章带大家学习一下c语言的指针的概念、使用、以及一些注意事项。 指针的概念 指针也就是内存地址&#xff0c;指针变量是用来存放内存地址的变量。就像其他变量或常量一样&#xff0c;您必须在使用指针存储其他变量地址之前&#xff0c;对其进行声明。 大白话讲解…

【数据集划分】oracle数据集划分(总结版)

【数据集划分】假如你有接近百万条oracle数据库数据&#xff08;成真版&#xff09; 写在最前面最终代码原理&#xff1a;生成随机索引并打乱顺序示例作用应用场景 遇到报错&#xff1a;ORA-01795&#xff0c;通过CTE&#xff08;Common Table Expressions&#xff09;和窗口函…

npm:Node.js包管理器的使用指南

一、引言 npm&#xff08;Node Package Manager&#xff09;是Node.js的官方包管理工具&#xff0c;它不仅仅是一个包管理器&#xff0c;更是一个完整的生态系统。npm允许开发者分享和重用代码片段&#xff0c;这些代码片段被称为“包”或“模块”。本文将详细介绍npm的使用场景…

Next.js Tailwind CSS UI组件

摘要&#xff1a; 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件&#xff01;这从头构建一个AI驱动的前端UI组件生成器&#xff0c;生成Next.js Tailwind CSS UI组件&#xff1a; 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

Ansible——command 模块

目录 基本用法 指定主机 指定用户 指定不同的清单文件 通过sudo执行 使用更多的模块参数 1.使用特定的模块参数&#xff0c;例如chdir&#xff1a; 2.使用creates和removes参数&#xff1a; creates参数 removes参数 并发控制 详细输出 例外处理 基本语法 常用参…

08-指针与数组的结合——数组指针与指针数组的区别

指针与数组的结合 示例 1:指针访问数组元素 通过指针访问数组元素的例子&#xff1a; #include <stdio.h>int main() {int arr[5] {1,2,3,4,5};//int *p1 &arr;int *p1 (int *)&arr; // 需要强制类型转换int *p2 arr;printf("*p1:%d\n", *(p1 …

SpringCloud 负载均衡 spring-cloud-starter-loadbalancer

简述 spring-cloud-starter-loadbalancer 是 Spring Cloud 中的一个组件&#xff0c;它提供了客户端负载均衡的功能。在 Spring Cloud 的早期版本中&#xff0c;Netflix Ribbon 被广泛用作客户端负载均衡器&#xff0c;但随着时间推移和 Netflix Ribbon 进入维护模式&#xff…

iOS Hook 崩溃

0x00 崩溃重现 被 Hook 的类&#xff0c;是这样的&#xff1a; interface ViewController : UIViewController endimplementation ViewController - (void)loadView {[super loadView];NSLog("%s", __func__); }- (void)test {NSLog("%s", __func__); }-…

Python第二语言(四、Python数据容器)

目录 一、 数据容器&#xff08;list、tuple、str、map、dict&#xff09; 1. 数据容器概念 2. 列表list&#xff08; [] &#xff09; 2.1 定义方式 2.2 嵌套列表 2.3 list通过获取下标索引获取值 2.4 下标使用概念 2.5 list列表的使用&#xff08;列表的方法&#xff…

​在 The Sandbox 元宇宙的 CU 超商中寻找Milk币!

CU&#xff08;韩国领先的便利店&#xff09;和 MiL.k&#xff08;基于区块链的忠诚度整合平台&#xff09;合作在 The Sandbox 推出了首款元宇宙游戏&#xff0c;通过独家活动在 Web2 和 Web3 之间建立联系。 在元宇宙中玩转 “Play CU X MiL.k” 体验 通过引人入胜的游戏内容…

Apple开发者证书创建完整过程

1.创建CSR文件: 打开钥匙串访问程序 选择从证书颁发机构请求 创建证书 保存CSR文件到桌面 成功如下: 开始创建证书: 选择

每天一道大厂SQL题【Day32】按消息量给广东省qq打标记

文章目录 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记每日语录第32题 需求三&#xff1a;按消息量给广东省qq打标记思路分析附表 答案获取加技术群讨论文末SQL小技巧 后记 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记 大家好&#xff0c;我是Maynor。相信大…

vue3引入cesium和olcs

首先引入包 pnpm i olcs; pnpm i -D vite-plugin-cesium pnpm i -S cesium在vite.config.js中配置&#xff0c;参考这位大佬的笔记 添加链接描述 import { defineConfig } from vite import vue from vitejs/plugin-vue import cesium from vite-plugin-cesium; // https://…

芝麻IP好用吗?来测试了!

作为老牌代理IP服务厂商&#xff0c;芝麻IP和青果网络代理IP都做的不错&#xff0c;市场上几乎可以是有口皆碑了&#xff0c;上次测试了青果网络的代理IP&#xff0c;效果表现得还挺不错&#xff0c;和他们自己宣传的以及客户对他们的评价大差不差。 总的来说&#xff0c;他们家…

交易中的预测和跟随

任何的交易决策&#xff0c;一定是基于某种推理关系的&#xff0c;这种推理关系是基于t时刻之前的状态&#xff0c;得到t时刻之后的结果&#xff0c;我们基于这种推理关系&#xff0c;根据当前的状态&#xff0c;形成了未来结果的某种预期&#xff0c;然后基于这种预期采取相应…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…