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