Maven 打包详解:如何将第三方依赖包一并打入 Jar 文件
在 Java 项目开发中,时常会遇到需要将 Oracle JDBC 驱动这类第三方依赖包直接打包进最终可执行 Jar 文件的场景。尤其是当这些依赖不在公共 Maven 仓库中,或因版本问题无法通过常规 自动下载时,手动配置便成为不可或缺的关键步骤。下面分享一套经过实践验证的完整配置方案,从本地依赖引入到 classpath 指定,一次搞定。
1. 通过本地方式导入第三方依赖包
首先,需要将本地的第三方 Jar 包以系统依赖的形式引入。以 Oracle 驱动 ojdbc6 为例,许多企业会将其存放在项目 lib 目录下。借助 system 作用域并配置 systemPath,Maven 即可识别该依赖并参与编译流程。
com.oracle ojdbc6 11.2.0.3 system ${basedir}/lib/ojdbc6-11.2.0.3.jar
2. 将依赖复制到 Jar 外部的 lib 目录
编译完成后,打包阶段需要把所有运行时依赖搬运到 target/lib 下。这里利用 maven-dependency-plugin 的 copy-dependencies 目标,通过指定输出目录和包含范围(runtime),即可自动完成依赖的迁移。
org.apache.maven.plugins maven-dependency-plugin copy-dependencies package copy-dependencies ${project.build.directory}/lib/ runtime false
3. 手动复制第三方依赖 Jar 到 lib 目录
这里有个需要注意的地方:maven-dependency-plugin 只会复制 Maven 仓库中的依赖,对于 system 作用域的本地 Jar 包,它并不会自动处理。因此还需要额外补充一步——使用 maven-antrun-plugin 将 lib/ojdbc6-11.2.0.3.jar 显式复制到 target/lib 下。这一步相当于“手工搬运”,确保所有必需的 Jar 包都集中到同一目录。
maven-antrun-plugin 3.0.0 compile package run
4. 在 MANIFEST.MF 文件的 class-path 中添加 lib/ojdbc6-11.2.0.3.jar
最后一步,也是最容易遗漏的一环——修改 MANIFEST.MF 文件。若希望 java -jar 运行时能正确加载 lib 目录下的依赖,必须通过 maven-jar-plugin 在 Class-Path 中显式声明每个 Jar 的路径。这里配置了 addClasspath: true 和 classpathPrefix: lib/,然后在 manifestEntries 中追加一条 Class-Path: lib/ojdbc6-11.2.0.3.jar。需要注意,这一步是“双重保障”——addClasspath 会自动添加其他依赖,但本地 Jar 仍需手动补充。
org.apache.maven.plugins maven-jar-plugin 2.4 false true lib/ lib/ojdbc6-11.2.0.3.jar
顺带提一下,如果后续希望将这类本地 Jar 永久安装到本地 Maven 仓库,可以使用 mvn install:install-file 命令,示例如下:
mvn install:install-file -Dfile=lib/api-gw-sdk-java-V3.3.0.jar -DgroupId=com.iflytek -DartifactId=api-gw-sdk-java -Dversion=V3.3.0 -Dpackaging=jar
这样下次便可以直接通过 引用了。
总结
这套方案的核心逻辑是:本地 Jar 通过 system 作用域引入编译流程,打包阶段手动复制到 lib 目录,最后在 MANIFEST.MF 中设定 classpath。虽然步骤稍显繁琐,但优势在于灵活可控,特别适用于那些无法上传至公共仓库的企业级依赖。希望这份配置能给您带来帮助。

