如何添加本地JAR文件到Maven项目中

有时我们需要将本地的jar文件添加到maven项目中,如果直接通过IDEA添加本地库引用的话,打包时候会丢失。网上中文教程的解决方法非常复杂,自己调查了一下,希望有此问题的同行不用再走弯路。

相关文章:
秒懂Java序列化与反序列化
秒懂 Java注解类型(@Annotation)
秒懂Java多线程

第一种方案:将jar安装到本地Maven仓库

第一步

首先确定你的电脑已经安装了Maven。在命令行中键入mvn -v命令,如果出现类似如下图所示,说明你的电脑已经安装了Maven,可进行第二步,如果没有请安装Maven

如何添加本地JAR文件到Maven项目中_第1张图片

第二步

安装jar到本地仓库

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

: 要安装的JAR的本地路径
:要安装的JAR的Group Id
: 要安装的JAR的 Artificial Id
: JAR 版本
: 打包类型,例如JAR

NOTE:最好在pom.xml文件所在的目录运行上述命令,个人经验不在根目录运行有时会安装不成功

第三步

使用,例如我安装了百度推送JAR到本地,我就可以在pom.xml文件中这样引用它了

<dependency>
    <groupId>com.baidu.appgroupId>
    <artifactId>bdpushartifactId>
    <version>3.0.1version>
dependency>

总结:这种方法弊端较大,程序的可维护性以及移植性较低。例如当你改变本地Maven仓库时需要重新安装。如果引用此JAR的项目是多人协调工作的项目,则每个人都要将其安装在自己的本地仓库。

解决办法

可以将此JAR文件放在工程的根目录下,让其随着项目走,然后在pom.xml文件中使用maven-install-pluginMaven初始化阶段完成安装。

<plugin>
    <groupId>org.apache.maven.pluginsgroupId>
    <artifactId>maven-install-pluginartifactId>
    <version>2.5version>
    <executions>
        <execution>
            <phase>initializephase>
            <goals>
                <goal>install-filegoal>
            goals>
            <configuration>
                <groupId>com.baidu.appgroupId>
                <artifactId>bdpushartifactId>
                <version>3.0.1version>
                <packaging>jarpackaging>
                <file>${basedir}/lib/bdpush-3.0.1.jafile>
            configuration>
        execution>
    executions>
plugin>

我使用IDEA上面的代码是可以工作的,如果你们使用Eclipse报错的话,加入如下代码

<pluginManagement>
    <plugins>
        
        <plugin>
            <groupId>org.eclipse.m2egroupId>
            <artifactId>lifecycle-mappingartifactId>
            <version>1.0.0version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>org.codehaus.mojogroupId>
                                <artifactId>aspectj-maven-pluginartifactId>
                                <versionRange>[1.0,)versionRange>
                                <goals>
                                    <goal>test-compilegoal>
                                    <goal>compilegoal>
                                goals>
                            pluginExecutionFilter>
                            <action>
                                <execute />
                            action>
                        pluginExecution>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>
                                    org.apache.maven.plugins
                                groupId>
                                <artifactId>
                                    maven-install-plugin
                                artifactId>
                                <versionRange>
                                    [2.5,)
                                versionRange>
                                <goals>
                                    <goal>install-filegoal>
                                goals>
                            pluginExecutionFilter>
                            <action>
                                <execute>
                                    <runOnIncremental>falserunOnIncremental>
                                execute>
                            action>
                        pluginExecution>
                    pluginExecutions>
                lifecycleMappingMetadata>
            configuration>
        plugin>
    plugins>
pluginManagement>

下面是我在IDEA中使用SpringBoot时候的配置

<plugin>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-maven-pluginartifactId>
    <executions>
        <execution>
            <phase>initializephase>
            <goals>
                <goal>install-filegoal>
            goals>
            <configuration>
                <groupId>com.baidu.appgroupId>
                <artifactId>bdpushartifactId>
                <version>3.0.1version>
                <packaging>jarpackaging>
                <file>${basedir}/lib/bdpush-3.0.1.jarfile>
            configuration>
        execution>
    executions>
plugin>

${basedir}表示pom.xml文件所在的目录

第二种方案

第二种方法比较粗暴简单,具体为将依赖设置为系统域,通过完全路径引用。例如要引用的JAR文件在 /lib下,那么使用如下方法添加依赖

<dependency>
    <groupId>com.baidu.appgroupId>
    <artifactId>bdpushartifactId>
    <version>3.0.1version>
    <scope>systemscope>
    <systemPath>${basedir}/lib/bdpush-3.0.1.jasystemPath>
dependency>

${basedir}表示pom.xml文件所在的目录,例如你的JAR文件在D盘下的jarLibs里面,就将${basedir}替换为“D:/jarLibs”即可。

note: 这种方法我自己在SpringBoot项目中打包成war文件时,没有成功打包到里面

第三种方案

第三种方案与第一种差不多,不同的是JAR文件被安装在一个单独的仓库里。这个本地仓库建在你项目的根目录下,随着项目走。

例如
1:我们在${basedir}pom.xml文件所在路径)目录下建立一个叫“maven-repository”的本地仓库。

2:使用如下命令安装我们要引用的JAR到此仓库中

mvn deploy:deploy-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar -Durl=file:./maven-repository/ -DrepositoryId=maven-repository -DupdateReleaseInfo=true    

3:在pom.xml中如下使用

申明仓库

<repositories>
    <repository>
        <id>maven-repositoryid>
        <url>file:///${project.basedir}/maven-repositoryurl>
    repository>
repositories>

然后添加引用

<dependency>
    <groupId>com.baidu.appgroupId>
    <artifactId>bdpushartifactId>
    <version>3.0.1version>
dependency>

你可能感兴趣的:(Java)