您的位置:

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项目,提高我们的工作效率。