IDEA Java项目添加本地Jar包


IDEA Java项目添加本地Jar包

一、问题提出

现在写 Java 项目一般使用 Maven 和 Gradle 作为构建工具。导入依赖包也由这些工具自动完成,只需要在 POM 文件或 build.gradle 等配置文件配置要引用的依赖即可。

但是,有时候我们的项目需要依赖自己写的本地 jar 包,此时就涉及到如何添加这些本地 Jar 包到项目,并且在最终打成的 War 或 Jar 包中包含这些本地 Jar 文件的问题。

二、问题解决

这里提供两种添加本地 Jar 包的方式:手动导入和通过本地 Maven 仓库导入。这里只讨论在 IDEA 的开发环境下。

(一)、手动导入本地 Jar

1、普通 Java 项目

针对普通 Java 项目,也即通过 Jar 包部署的项目。如何添加本地依赖 Jar 文件呢

首先看下 IDEA 下工程结构:

IDEA Java项目添加本地Jar包-打不死的小强

很简单的结构。既没有 resources 目录也没有 webapp 目录,更没有 pom 等配置文件。那接下来看下这种项目如何受到导入本地 Jar 包。

通过 File>Project Structure…>Project Settings>Modules 添加 Jar 依赖,如下图:

IDEA Java项目添加本地Jar包-打不死的小强

选择 jar 文件所在目录,选择 jar 文件,OK :

IDEA Java项目添加本地Jar包-打不死的小强

然后就可以看到 依赖已经添加到该 module 了。点击“apply”应用:

IDEA Java项目添加本地Jar包-打不死的小强

此时,就可以在开发阶段使用此 jar 中的 class 和方法了。然后项目打包的时候可以看到此 jar 会自动包含在 artifact 中,如下图所示:

IDEA Java项目添加本地Jar包-打不死的小强

补充:如果该 jar 没有包含在 artifact 输出中,需要按下图所示操作手动添加到
artifact output 中:

IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强
jar 手动添加到 artifact output 后会在如图所示显示

打包后可以看到此 jar 会自动编译成 class 文件,并放在相应的 package 下:

说明最终部署可正常使用。

注意:jar 包(以下指 certication.jar)内包含 jar 包(以下指 encryption.jar)默认在运行时是无法找到 encryption.jar 内 Class 的(报 ClassNotFoundException),即使在 MANIFEST.MF 中添加 Class-Path 也不行(因为 Class-Path 只能找 jar 之外的路径),但是可以通过自定义类加载器或者直接代码中读取 encryption.jar 文件解决。简单的方式就是打 certication.jar 时通过 IDEA 提取 encryption.jar 的内容到 certication.jar(即 certication.jar 包含的是 encryption.jar 解压后的 class 文件),如上步补充所示

2、Java web 项目

针对 Java web 项目,通过 War 包部署的项目。如何添加本地依赖 Jar 文件呢? 有两种方式。

先来看下 IDEA 下项目结构:

IDEA Java项目添加本地Jar包-打不死的小强
方式一、Project Settings 内设置

同样可以使用 1、普通 Java 项目 的添加方式,这样就可以在开发环境使用了。但是如果打包成 war 的话,该 jar 文件不会自动包含在 war 包里,也即部署环境是不 OK 的。这就需要走下面的步骤。

通过 File>Project Structure…>Project Settings>Libraries 添加 Jar 依赖,如下图:

IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强

OK 后,jar 文件会出现在 Libraries 列表下,如下图,apply 应用,再 OK

IDEA Java项目添加本地Jar包-打不死的小强

接下来进入下一步, 通过 File>Project Structure…>Project Settings>Artifacts > 选择 war(exploded) > 选择 WEB-INF/ lib 添加 lib 文件,如下图:

IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强

然后再打 war 包,该 jar 包就会包含在 war 包里了。

IDEA Java项目添加本地Jar包-打不死的小强

就可以正常使用 war 包部署了。

方式二、将 Jar 文件放到项目目录下,再加入 Lib

在 webapp > WEB-INF 下新建目录 lib ,将 jar 文件直接复制到该目录下。然后右击,菜单选择 Add as Library ,如下图

IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强

完成后,在 Project Settings 的 Modules 和 Libraries 下就能看到该 jar 依赖了

IDEA Java项目添加本地Jar包-打不死的小强
IDEA Java项目添加本地Jar包-打不死的小强

然后重新打 war 包即可。不过这个方法有时会无效,当重新刷新 gradle 的 Refresh all Gradle projects 按钮时需要重新执行 Add as Library 操作。

(二)、Maven 本地仓库导入 Jar

因为本地 jar 包没有在 Maven 中央仓库存在,所以不能直接使用 Maven dependency 去添加。但是我们可以将 本地 jar 包安装到 Maven 的本地仓库。具体方式如下:

mvn install:install-file -Dfile=d:\repo\certication.jar -DgroupId=com.xxx -DartifactId=certication -Dversion=1.0 -Dpackaging=jar

说明:

  • -Dfile : 指定要安装的 jar 文件路径
  • -DgroupId : 和 -DartifactId 同 pom 中 groupId 和 artifactId 含义一样,指定包路径
  • -Dversion : 版本
  • -Dpackaging : 指定安装成什么类型的归档文件

执行完上面命令就可在 Maven 本地仓库看到该 jar 包了。然后就可以快乐的使用 Maven 自动导入依赖 Jar 了。

<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>certication</artifactId>
</dependency>

另外,还有另一种基于 maven 添加本地 Jar 的方式,参见:《Spring boot 添加本地 Jar 包

(三)、Gradle 导入本地 Jar

在 build.gradle 中添加如下配置,refresh gradle Project 即可

compile files('src/main/webapp/WEB-INF/lib/certication.jar')
  • files()中可以指定 jar 文件相对路径也可以指定绝对路径

OK, 完毕!

补充:有关打 Jar 包时引用外部其他 Jar 包的方式,可以参见:怎么把引用的 jar 打到 jar 包里面



发表评论

邮箱地址不会被公开。 必填项已用*标注