maven 本地打包

文章目录

1. 简介

Maven和POM的基本概念

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

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

xml 复制代码
<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 文件的基本结构:

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.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文件包含了所有的依赖、类和资源,并且它可以直接运行,不需要额外的服务器容器。

xml 复制代码
<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>标签中添加如下配置:

xml 复制代码
<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,以确保所有的测试都被执行。

xml 复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

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

xml 复制代码
<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>标签中添加如下配置:

xml 复制代码
<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>标签中进行。一个基本的配置如下:

xml 复制代码
<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>配置如下:

xml 复制代码
<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本地打包

xml 复制代码
<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包。

进一步的学习资源

相关推荐
小李不想输啦1 小时前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
张铁铁是个小胖子1 小时前
微服务学习
java·学习·微服务
ggs_and_ddu1 小时前
Android--java实现手机亮度控制
android·java·智能手机
敲代码娶不了六花3 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
Yhame.3 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
是小崔啊4 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL5 小时前
linux安装idea
java·ide·intellij-idea
青春男大5 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
HaiFan.5 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)6 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先