项目情况

没有搭建私仓,多模块依赖的父子模块(工程),需要依赖提供商提供的jar包。期望:

  1. 在需要依赖该模块的模块下依赖,不将该jar影响其他模块
  2. 打包简单,在其他同事启动项目是不要手动处理这个jar包。

本文介绍三种方式:

  1. 打包时,将jar移至BOOT-INF
  2. 打包时,将jar安装至本地仓库
  3. 创建一个不同的本地仓库

将jar移至BOOT-INF

实现方案

将jar放置需要依赖的模块下面。
项目结构

然后直接依赖就好了,groupId、artifactId、version,随意写,方便你认识就好。

1
2
3
4
5
6
7
8
9
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>taobao-sdk</artifactId>
<version>0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/taobao-sdk.jar</systemPath>
</dependency>
</dependencies>

这是在你代码中已经可以i使用该jar了,但是启动会找不到类。还需要在打包时将该jar包放置BOOT-INF目录下。

1
2
3
4
5
6
7
8
9
10
11
<build>
<resources>
<resource>
<directory>lib</directory>
<targetPath>/BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
</build>

弊端

这种方案之所以推荐,是因为存在弊端,springboot的main提供没有问题,但是打成war使用tomcat启动会找不到类。要解决这个问题,需要在springboot的启动模块中,再引入该jar包,然后将其放置WEB-INF下。

将jar安装至本地仓库(推荐)

在 pom 文件中使用 maven-install-plugin 插件的方式,这种方式会在 maven initialize 阶段将相应的 jar 包安装到本地仓库,后续使用只需正常maven依赖即可。但是这个动作得在你所需要依赖的模块打包之前,我是新建一个模块用来完成这个动作,然后在所需要依赖模块中依赖新建的模块。

将jar包放置新建的模块的lib目录下,然后在pom中添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.alibaba</groupId>
<artifactId>taobao-sdk</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<file>${project.basedir}/lib/taobao-sdk.jar</file>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

接着在所需要依赖jar包的模块中,直接依赖即可

1
2
3
4
5
6
7
8
<dependency>
<!-- 新建的模块 -->
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>taobao-sdk</artifactId>
<version>0.1</version>
</dependency>

创建一个不同的本地仓库

不同在于 jar 包安装的仓库位置。假如我们有一个本地仓库,名称为 maven-repository,位置在 ${basedir}(pom.xml所在的根路径)。第一步要做的就是将 jar 包部署到本地仓库,如下所示:

1
mvn deploy:deploy-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar -Durl=file:./maven-repository/ -DrepositoryId=maven-repository -DupdateReleaseInfo=true

通常 Maven 命令 deploy:deploy-file 会将 artificial 安装在远端仓库中,但是在本例子中仓库地址在本地。 添加完 jar 包后需要在对应的 pom 文件添加对应的仓库:

1
2
3
4
5
6
<repositories>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/maven-repository</url>
</repository>
</repositories>

然后添加对应的依赖:

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>taobao-sdk</artifactId>
<version>0.1</version>
</dependency>