场景
Sass项目最近要适配达梦数据库,因此在common包中引入了达梦数据库的jdbc依赖,
这个依赖必须在官网中下载,然后copy到本地代码文件夹中,maven引入时使用 下面这种方式来做
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.62</version>
<scope>system</scope>
<systemPath>${project.basedir}/jar/DmJdbcDriver18.jar</systemPath>
</dependency>
1
2
3
4
5
6
7
这种方式有一个问题,就是这个项目打包后,这个项目的jar被引入到其他的项目时,这个system类型的jar并不会被带过去,
使用网上的一些教程,例如将达梦下的类编译时拷贝到common的classes下,但是总是会有一些问题,这里可能是我对maven这块不太熟悉,所以没有找到更好的办法。
解决方式
因为我们的common包,每个人都可以检出到本地编译打包,所以这里就有一个可发挥的空间。
我在common打包时,添加一个生命周期,提前将common中的达梦jar install到本地即可,然后common中引入达梦的jdbc使用正常的方式引入,如下两个代码示例
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-system-dependency</id>
<phase>validate</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/jar/DmJdbcDriver18.jar</file>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.62</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.62</version>
</dependency>
1
2
3
4
5
如此,便可正常使用了,因为我们本地有了这个jar,所以common在其他项目中引入时,便可以带着它的pom告诉其他项目在本地仓库中寻找达梦的jdbc jar包了,
不过这种方式的无法做到的就是,如果这个common包是每个人自己拿不到的,而是直接放在私服上,让开发人员引入的,这里就会有问题,但是既然都有私服了,那么直接将达梦的jar直接上传到私服不就可以了?
除非私服都没有,直接把common jar打成一个jar 发送给别人使用,那么对方可能没法引入达梦的jar,这时候要么让对方自己本地自行引入,要么考虑将达梦jar中的classes一起放入你打的jar中,如果有其他更好的方式,也可留言告知。