注:此方式只適用於springmvc項目,springboot項目不可用!
若是springboot項目可參考:https://www.cnblogs.com/007sx/p/12442386.html
完整的引入三方jar包含2部分,缺一不可,
第一部分為編寫代碼階段,編譯時引用!
第二部分為打包成war階段,運行時引用!
示例(多模塊項目,單模塊同理,以下也有說明!):
第一部分(編譯調試時使用):
目錄結構以及jar所在目錄如下:
pom.xml中:
<dependency> <groupId>com.test</groupId> <artifactId>testjar</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/test.jar</systemPath> </dependency>
第二部分(打包時使用):
pom.xml(其它模塊)中:
<build> <finalName>${project.artifactId}</finalName> <plugins> <!--使用maven-war-plugin插件在編譯時指定第三方jar包目錄並引入--> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> <configuration> <webResources> <resource> <!-- 引入本模塊下的jar/單模塊項目的jar --> <!--<directory>${basedir}/src/main/resources/lib</directory>--> <!-- 引入多模塊項目其它模塊下的jar --> <directory>../cashloan-component/src/main/resources/lib</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin> </plugins> </build>
說明:由於此pom.xml是子模塊的,所以引入其它模塊下的jar需要../xxx形式,如果是單模塊項目,直接${basedir}/xxx即可!
最后打包的效果:
target/xxx/WEB-INF/lib/test.jar 存在即可!
完成這步驟代碼即可正常構建運行和打包部署!
注:目前存在的問題,打包之后會在classes目錄下target/xxx/WEB-INF/classes或者target/classes目錄下多出來一個lib(示例中resources下目錄命名為lib)目錄里面存放的是三方jar,這個jar在項目運行中是用不到的,所以浪費了傳輸war包的時間!還沒找到很好的解決方案,希望多多評論交流!
(已解決!)
方案分為單模塊和多模塊。
1. 單模塊pom.xml:只需在war打包插件中排除即可,如:
<packagingExcludes>WEB-INF/classes/lib/*.jar</packagingExcludes>
2. 多模塊的被依賴模塊pom.xml中(即最終打成jar的模塊):
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>lib/*.jar</exclude> </excludes> </resource> </resources> </build>
當然,多模塊時,2種方式都加上也可以,一勞永逸!