Maven项目打包成jar包详解

Maven是一个基于项目对象模型(Project Object Model,POM)概念的项目管理工具,使用Maven来管理Java项目可能是一种比较经典的方法,因为其依据POM模型,使得代码构建和项目管理变得更为简单易懂、规范化。

一、pom.xml文件

在使用Maven项目打包成jar包时,首先我们需要了解一下pom.xml文件。在pom.xml中,其中包含了项目的基础信息、依赖项管理、插件配置等重要内容。我们需要通过修改pom.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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.example</groupId>
  <artifactId>example</artifactId>
  <version>1.0-SNAPSHOT</version>
  
  <dependencies>
     <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.0-jre</version>
     </dependency>
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.9</version>
     </dependency>
  </dependencies>
  
  <build>
     <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
     </plugins>
  </build>
  
</project>

其中,groupId、artifactId、version是一个POM需要包含的必要信息,分别表示着项目的组织名、项目名、项目的版本。在dependencies标签中,列出了本项目所需要的所有依赖,可以根据实际需要添加或者删除依赖。build标签中的plugins标签用于添加一些插件,这里我们添加了一个maven-jar-plugin插件。通过配置该插件,我们可以将我们的Java项目打包成jar包。

二、使用maven-jar-plugin打包成jar包

接下来,我们可以通过以下命令,使用maven-jar-plugin将我们的Java项目打包成可执行的jar包:

mvn package

运行该命令后,maven会在target目录下生成一个example-1.0-SNAPSHOT.jar文件,这便是我们打包好的Java项目。

需要注意的是,如果我们想要打包的jar包成为一个可执行的文件,需要在pom.xml的maven-jar-plugin标签下添加一些配置,例如如下:

<configuration>
   <archive>
      <manifest>
         <addClasspath>true</addClasspath>
         <mainClass>com.example.App</mainClass>
      </manifest>
   </archive>
</configuration>

在这个配置中,我们将archive标签中的manifest标签打开,然后指定我们的主类mainClass即可。

三、将依赖打包进jar包中

在默认情况下,Maven将会为我们打包出环境独立的jar包,这意味着在运行时,需要先到maven默认设置的仓库中寻找项目的依赖。但是在某些场合下,我们需要将依赖打包进jar包中,使得我们的实际使用更加方便。Maven的maven-assembly-plugin插件支持将依赖打包进jar包中。

首先在pom.xml文件中增加以下插件依赖:

<build>
    <plugins>
        <!--maven-jar-plugin用于生成jar包-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <!--maven-assembly-plugin用于将依赖打包进jar包中-->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.example.App</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

之后,我们可以使用以下命令,来将我们的项目打包成包含所有依赖的jar包:

mvn assembly:assembly

运行该命令后,maven会在target目录下生成一个名为example-1.0-SNAPSHOT-jar-with-dependencies.jar的新jar包,该jar包即是将所有依赖打包进来的Java项目。

四、正常打包与瘦身打包

我们在使用Maven打包Java项目时,可以分为正常打包和瘦身打包两种方式。

正常打包会将项目所有的依赖全部打包到生成的jar包中,这样虽然使得项目使用起来更加简单,但是对于一些大型项目,项目本身的jar包会因此变得特别的大,这会造成不必要的空间浪费。

瘦身打包则是仅将项目本身的代码和必要的依赖打包到生成的jar包中,然后在启动项目时,通过在执行命令时添加依赖包的路径,来使项目调用对应的依赖包。这种方式可以使得项目的jar包变小,也更容易维护。

为了实现这一点,我们需要使用maven-shade-plugin插件,该插件可以打包项目本身和必要的依赖到一个可执行的jar包中,实现瘦身打包。

首先在pom.xml文件中加入以下插件依赖:

<plugins>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-shade-plugin</artifactId>
       <version>3.2.1</version>
       <executions>
           <execution>
               <phase>package</phase>
               <goals>
                   <goal>shade</goal>
               </goals>
               <configuration>
                   <transformers>
                       <transformer
                           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                           <mainClass>com.example.App</mainClass>
                       </transformer>
                   </transformers>
               </configuration>
           </execution>
       </executions>
   </plugin>
</plugins>

然后,我们使用以下命令来执行瘦身打包操作:

mvn package shade:shade

运行该命令后,maven会在target目录下生成一个名为example-1.0-SNAPSHOT-shaded.jar的新jar包,该jar包仅包含了项目本身的代码以及必要的依赖,方便项目的管理和维护。

总结

通过本篇文章的讲解,我们了解到了如何使用Maven来打包Java项目成为jar包,并且从多个方面对这一操作进行了详细的阐述。通过这些知识,我们可以更轻松地构建和管理Java项目,提高我们的工作效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/192051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-30 15:15
下一篇 2024-11-30 15:15

相关推荐

  • 掌握magic-api item.import,为你的项目注入灵魂

    你是否曾经想要导入一个模块,但却不知道如何实现?又或者,你是否在使用magic-api时遇到了无法导入的问题?那么,你来到了正确的地方。在本文中,我们将详细阐述magic-api的…

    编程 2025-04-29
  • 如何将Java项目分成Modules并使用Git进行版本控制

    本文将向您展示如何将Java项目分成模块,并使用Git对它们进行版本控制。分割Java项目可以使其更容易维护和拓展。Git版本控制还可以让您跟踪项目的发展并协作开发。 一、为什么要…

    编程 2025-04-28
  • GitHub好玩的开源项目

    本文旨在介绍GitHub上一些好玩的开源项目,并提供代码示例供读者参考和学习。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各种平台和设备,方便用户在Git…

    编程 2025-04-28
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • IIS部署Python项目

    本文将从多个方面详细阐述在IIS上如何部署Python项目。包括安装IIS、安装Python、配置IIS、编写和部署Python代码等内容。 一、安装IIS和Python 在开始进…

    编程 2025-04-28
  • 如何使用TKE来开发Java项目

    本文将从多个方面详细阐述如何使用TKE(Theia IDE)来进行Java项目的开发。TKE是一个功能强大的在线集成开发环境,提供了大量的工具和插件,让开发者可以高效地进行Java…

    编程 2025-04-28
  • Spark开源项目-大数据处理的新星

    Spark是一款开源的大数据分布式计算框架,它能够高效地处理海量数据,并且具有快速、强大且易于使用的特点。本文将从以下几个方面阐述Spark的优点、特点及其相关使用技巧。 一、Sp…

    编程 2025-04-27
  • 如何解决IDEA创建SpringBoot项目无法连接Spring.io中心

    该问题可能是由于IDEA设置的代理问题,缺乏必要的插件和配置,或网络原因引起的。 一、代理设置 1、在IDEA中进入File->Settings->Appearance…

    编程 2025-04-27
  • Eclipse中创建Python项目的方法

    本文将介绍如何在Eclipse中创建Python项目。通过本文的指导,您可以快速的在Eclipse中创建Python项目,并且编写Python程序。 一、安装Python插件 在使…

    编程 2025-04-27
  • 如何引入slf4j为中心的java项目中

    本文将从以下几个方面详细讲解如何引入slf4j为中心的java项目中: 一、为什么要使用slf4j slf4j(Simple Logging Facade for Java)是一个…

    编程 2025-04-27

发表回复

登录后才能评论