前言
有些时候,因为各种各样的原因我们没办法通过maven坐标来引入Jar包,只能通过源文件来引入Jar包,下面就是如何引入Jar包的详细步骤。
准备
你需要准备的东西很简单,一个Jar的源文件,一个Java工程,一个部署环境(可选)
文件写到工程中
如图,在工程中创建libs文件夹,然后将Jar包源文件复制到libs文件夹中。
Jar包在Intelij Idea中生效
上面我们引入的Jar包并不能查看里面的类和代码,这里需要通过Jar引入的方式让Jar在Intelij Idea中生效,操作如下:
第三步之后选择这里的Java选项会拉起“文件选择器”,选择刚才我们复制到libs文件夹中的文件,然后点击 Apply和OK。
此时你会看到已经可以在Idea中查看Jar包的代码了。
Jar包在工程中生效
上面只是将Jar包放在了工程中并且能用Intelij Idea能查看Jar包中的代码而已,当我们在工程中使用Jar包中的类时会发现还是找不到。
这个时候就需要我们使用pom的方式引入到工程中,配置如下:
<dependencies>
<dependency>
<groupId>local</groupId>
<artifactId>local-jar</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/../libs/test-code.jar</systemPath>
</dependency>
</dependencies>
注意,在systemPath中,${project.basedir}/…/libs/test-code.jar 这样的路径。${project.basedir} 代表当前模块的目录,…/libs/test-code.jar代表从当前模块的目录向上一级,然后进入"libs"文件夹,找到jar包。另外这里的 groupId和artifactId只是maven库里的坐标没有实际意义,可以随便写。
然后,你就可以正常地使用这个jar包中的类和方法了。
maven打包时将libs文件打进去
上面虽然可以在工程中使用Jar中类,但是当你打包部署的时候就会发现,libs中的Jar包还是没有引入,运行时报类找不到的异常。
使用system作用域的依赖在打包时并不会被包含到最终的jar或war文件中。这是因为system作用域的依赖通常是指向JDK自带的或者系统类库的jar,而这些jar在目标系统中通常已经存在,所以没有必要包含到打包文件中。
如果你确定这个jar必须要被包含到打包文件中,需要使用一个插件来实现,如maven-assembly-plugin或maven-shade-plugin。这些插件可以创建一个包含所有依赖的"fat jar",解决依赖缺失的问题。pom.xml配置如下:
<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>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
结语
至此,解决了一个Jar包从复制,查看,代码引入,代码部署的所有流程。如果有帮助点个赞呗。