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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-30 15:15
下一篇 2024-11-30 15:15

相關推薦

發表回復

登錄後才能評論