如果有些jar包在maven仓库中是不存在,我们有两种方式将其引入到我们的maven工程。我这里已smarthome-nbcodec-1.1.6-SNAPSHOT.jar 包为例。
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.smarthomegroupId>
- <artifactId>nbcodecartifactId>
- <version>1.1.6-SNAPSHOTversion>
- dependency>
首先在项目中建立一个libs目录来存放第三方jar包。
pom 引入
- <dependency>
- <groupId>smarthomegroupId>
- <artifactId>nbcodecartifactId>
- <version>1.1.6-SNAPSHOTversion>
- <scope>systemscope>
- <systemPath>${pom.basedir}/libs/smarthome-nbcodec-1.1.6-SNAPSHOT.jarsystemPath>
- 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 文件,看所有的包是否真确。