如果有些jar包在maven仓库中是不存在,我们有两种方式将其引入到我们的maven工程。我这里已smarthome-nbcodec-1.1.6-SNAPSHOT.jar 包为例。
第一种方式比较简单,只需将其jar包导入到本地 mavan 仓库中。
mvn install:install-file -Dfile=PATH/smarthome-nbcodec-1.1.6-SNAPSHOT.jar -DgroupId=com.my.smarthome -DartifactId=nbcodec -Dversion=1.1.6-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
其中,Dfile为jar包的位置,-DgroupId、-DartifactId、-Dversion可根据情况自定义,-Dpackaging为jar。然后就可以正常通过pom引入了。
<dependency>
<groupId>com.my.smarthome</groupId>
<artifactId>nbcodec</artifactId>
<version>1.1.6-SNAPSHOT</version>
</dependency>
第二章方式可以将其放到项目中,然后引入进来
首先在项目中建立一个libs目录来存放第三方jar包。
pom 引入
<dependency>
<groupId>smarthome</groupId>
<artifactId>nbcodec</artifactId>
<version>1.1.6-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/libs/smarthome-nbcodec-1.1.6-SNAPSHOT.jar</systemPath>
</dependency>
其中,groupId、artifactId、version可根据情况自定义,scope只能是system范围,systemPath 为 jar 包的位置,pom.basedir为。
这样可以直接在代码中直接使用了,但是打包后还是运行不了,因此还得配置下打包相关的配置。
maven-assembly-plugin插件打包
<build>
<resources>
<!-- 复制本地扩展jar包到libs目录 -->
<resource>
<directory>./libs</directory> <!-- 当前libs目录下的jar包 -->
<targetPath>${project.build.directory}/dist/${artifactId}-${version}/lib</targetPath> <!-- 复制到本模块打包目录的lib目录 -->
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<!--定义了上面的resource, 要想默认的src/main/resources目录生效, 必须显式额外增加下面的配置-->
<resource>
<directory>src/main/resources</directory>
<!-- 表示是否对配置文件中的${}占位符进行解析替换-->
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<!-- maven-assembly-plugin插件配置,配置输出目录为dist -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>package.xml</descriptor>
</descriptors>
<outputDirectory>${project.build.directory}/dist/</outputDirectory>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xiangtao.LotApp</mainClass>
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<!-- 在Class-Path下添加配置文件的路径 -->
<Class-Path>resources/ lib/smarthome-nbcodec-1.1.6-SNAPSHOT.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
重点注意下位置别写错
如果最后还是不成功,可以将其打包后的jar包进行解压,然后检查看生成的 MANIFEST.MF 文件,看所有的包是否真确。