需求来源

模拟场景是有一个服务商提供的定制包,但是公司内部又没有自建nexus仓库或者这个包不方便放到仓库中,

在我的场景是以前的老代码依赖的一个包,由于环境迁移将老的nexus仓库已经废弃了,而新的环境又拉不到这个包,此时有两个方案,一个是将生产环境里面这个包拿出来放到新的迁移环境的nexus仓库中去,或者是按照下面的方法把包放到项目内部进行管理依赖

解决方案实现

  1. 假设我们有一个二方或三方包长这样,但是它没有在任何公网或内网仓库内能访问到
  2. 这个包目前非常简单,只有一个接口待实现,实际情况下可能还有很多东西,但是不影响,我们直接进行打包,最后会得到一个jar包
  3. 将这个jar包通过命令打包到我们本地的maven仓库中,这一步主要是为了自动生成它对应的pom文件,参数内请注意运行位置和jar包位置,如果当前运行位置不在jar包的目录下,可以设置绝对路径,例如-Dfile=D:/projects/localFacade/target/localFacade-1.0.jar
mvn install:install-file -Dfile=localFacade-1.0.jar -DgroupId=com.xsx -DartifactId=localFacade -Dversion=1.0 -Dpackaging=jar
  1. 执行成功后我们可以在.m2的本地maven仓库内根据路径找到这个包,现在是长这样,我们需要拿到这个.pom文件
  2. 在自己的项目内创建一个文件夹,并根据groupId和artifactId以及版本号创建目录,跟.m2文件夹内的目录一致,并且将jar包和上面的.pom文件放进来,如下所示
  3. 在需要依赖这个包的模块内增加repository配置,层级在project下即可,project.basedir地址为当前模块的目录,不是整个项目的根目录,我放在父pom下的,所以层级中配置的是${project.basedir}/../localRepo,否则如果localRepo在模块下同级,那就不需要中间的“../
<repositories>
        <repository>
            <id>localRepo</id>
            <name>localRepo</name>
            <url>file://${project.basedir}/../localRepo</url>
        </repository>
    </repositories>
  1. 在dependency里面添加maven依赖,然后刷新maven配置等待加载依赖,然后项目中就可以正常引用私有包中的类
<dependency>
        <groupId>com.xsx</groupId>
        <artifactId>localFacade</artifactId>
        <version>1.0</version>
    </dependency>
  1. 完整目录层级如下
  2. 模块1(md1)中的完整pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http:///POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:///POM/4.0.0 http:///xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>localRepoTest</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>md1</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.xsx</groupId>
            <artifactId>localFacade</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>localRepo</id>
            <name>localRepo</name>
            <url>file://${project.basedir}/../localRepo</url>
        </repository>
    </repositories>
</project>