1.背景
客戶環(huán)境并沒有某些三方依賴,無法實(shí)現(xiàn)docker化部署
1.1 方案一
將那幾個(gè)依賴的本地倉(cāng)庫(kù)曲饱,復(fù)制到docker打包的機(jī)器,讓package時(shí)從本地倉(cāng)庫(kù)引入
可行,之前臨時(shí)解決方案婆誓,缺點(diǎn)就是,客戶調(diào)整服務(wù)器镶柱,需要再次將本地倉(cāng)庫(kù)復(fù)制到對(duì)應(yīng)服務(wù)器上
1.2 本地引入
// java可以通過<systemPath>${basedir}/lib/combined-lib.jar</systemPath>
<dependency>
<groupId>tech.ty</groupId>
<artifactId>pdi</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/combined-lib.jar</systemPath>
</dependency>
將包放置項(xiàng)目的lib目錄下,但是打包并沒有將對(duì)應(yīng)的lib/*.jar 打包到 BOOT-INF/lib 下面旷档,需要增加plugin
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-local-jar-to-target</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/BOOT-INF/lib/</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/lib</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2.整合成一個(gè)依賴
由于我引入的第三方包是一個(gè)pom,內(nèi)部間接引入了其他依賴
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>${kettle.version}</version>
</dependency>
2.1 shade
通過shade可以將所有l(wèi)ib打包成一個(gè)jar
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>${kettle.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<shadedArtifactAttached>false</shadedArtifactAttached>
<shadedArtifactClassifier>shaded</shadedArtifactClassifier>
<outputFile>${project.build.directory}/combined-lib.jar</outputFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我之所以要排除exclusion歇拆,通過maven依賴存在遠(yuǎn)近先后順序問題鞋屈,
還有版本沖突,不同包會(huì)出現(xiàn)目錄項(xiàng)目 類名項(xiàng)目故觅,這個(gè)就需要自己控制依賴順序問題
否則報(bào)錯(cuò)classnotfound
還有就是我們目前這兩個(gè)依賴打包的成jar過大厂庇,100多M,當(dāng)前的springboot版本啟動(dòng)會(huì)報(bào)錯(cuò),及需要分析內(nèi)部包输吏,先排除权旷,然后再?gòu)谋卷?xiàng)目自己引入,
自此贯溅,項(xiàng)目運(yùn)行正常拄氯,中間會(huì)遇到很多問題,需要自己細(xì)心依依排查它浅,程序員不易~
3.gradle擴(kuò)展
gradle項(xiàng)目更簡(jiǎn)單译柏,可以通過批量導(dǎo)入,maven找了很多博客并未發(fā)現(xiàn)姐霍,本項(xiàng)目那兩個(gè)內(nèi)部依賴100+,顯然一個(gè)個(gè)引入不現(xiàn)實(shí)鄙麦,建議其他的小伙伴,慢慢從maven轉(zhuǎn)成gradle镊折,gradle功能更強(qiáng)大
implementation fileTree('dir': 'lib', include: ['*.jar'])