天天看點

使用maven引入第三方jar包以及打包

作者:是蜃樓啊

我們知道,Maven 是通過倉庫對依賴進行管理的,當 Maven 項目需要某個依賴時,隻要其 POM 中聲明了依賴的坐标資訊,Maven 就會自動從倉庫中去下載下傳該構件使用。但在實際的開發過程中,經常會遇到一種情況:對接第三方廠商,人家給了一個jar包,然後項目需要使用這個jar包,但是這個jar包并沒有上傳到遠端倉庫,這時候就不能使用簡單的pom依賴引用了,是以存在兩個問題:

  1. 如何将jar引用到項目,并且能夠讓項目正常調用該jar包的方法
  2. 外部引用的jar如何打包進項目?

當然公司如果是有私服的,可以直接将jar包上傳到私服。然後直接通過pom依賴簡單的聲明即可。

是以本篇文章重點針對于這兩點進行講解

目錄

如下是個maven項目,java-demo.jar是我們要引入的jar包。

使用maven引入第三方jar包以及打包
<!--外部依賴-->
<dependency>
  <groupId>com.gzl.cn</groupId>
  <artifactId>java-demo</artifactId>
  <!--依賴範圍-->
  <scope>system</scope>
  <version>1.0-SNAPSHOT</version>
  <!--依賴所在位置-->
  <systemPath>${project.basedir}/src/main/resources/lib/java-demo.jar</systemPath>
</dependency>           

在以上配置中,除了依賴的坐标資訊外,外部依賴還使用了 scope 和 systemPath 兩個元素。

  • scope 表示依賴範圍,這裡取值必須是 system,即系統。
  • systemPath 表示依賴的本地構件的位置。

打包插件:<includeSystemScope>true</includeSystemScope> 這個非常重要,是将外部依賴打包進來的,如果沒有該配置,打出來的jar包是不包含外部jar包的,進而可能會導緻運作異常!

<build>
      <!-- 打出來的jar包名 -->
    <finalName>maven-demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
                <!-- 主啟動類全類名 -->
                <mainClass>com.gzl.cn.App</mainClass>
                <!-- 這個配置很重要,是将外部依賴打包進來的,如果沒有該配置,打出來的jar包是不包含外部jar包的 -->
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                  <!--自定義 id -->
                  <id>repackage</id>
                    <!--插件目标 -->
                  <goals>
                    <goal>repackage</goal>
                  </goals>
            </execution>
          </executions>
        </plugin>
    </plugins>
  </build>           

但是現在存在一個問題,打出來的jar包可以用,但是特别大。

使用maven引入第三方jar包以及打包

如下是jar包解壓後的目錄:

使用maven引入第三方jar包以及打包

我們可以将jar解壓會發現BOOT-INF的lib目錄下是有一個第三方引用的jar。

使用maven引入第三方jar包以及打包

然後在BOOT-INF的classes/lib目錄下也有個這個jar包,這個是源碼當中的jar包,上面的是打出來的jar包運作的時候所要依賴的jar包。正常來說我們就可以将源碼當中的jar包給去掉,這樣就可以減小jar包的大小。

使用maven引入第三方jar包以及打包

添加如下依賴,排除jar的打包

<build>
	<resources>
	  <resource>
	    <directory>src/main/resources</directory>
	    <filtering>true</filtering>
	    <excludes>
	        <exclude>**/lib/**</exclude>
	    </excludes>
	  </resource>
	</resources>
	...以下省略
</build>           

重新進行打包後會然後将jar解壓觀察源代碼當中已經沒有lib目錄了。

使用maven引入第三方jar包以及打包

java -jar 依然是可以運作起來的

使用maven引入第三方jar包以及打包