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/zh-hant/n/192051.html