Maven离线仓库增量更新jar包

622 阅读1分钟

背景:

因为我们的开发环境是离线的,因此每次在外网开发了一个功能demo使用了maven引入了新的依赖,要将这个demo工程在内网继续开发,就得将一个个依赖包导进去,如果少的话直接将某些文件夹拷贝进内网开发环境的repository里面就行了,但是多的话就很麻烦。

解决办法:

  1. 将外网的项目用idea设置maven本地仓库到一个新的文件夹中

image.png 然后回到idea项目的pom.xml中,进行maven刷新,将当前项目所需要的jar包自动按照仓库结构下载到新的文件夹中。此时这个新文件夹就具备了当前项目运行的最小依赖。 2. 将这个文件夹导入内网,进行合并到现有的仓库中。这里就需要用到一段代码,要求就是将源文件夹中的文件或者文件夹复制到目标文件夹中(内网现有的repository)。 3. 代码如下:

public class CopyFileOrDir {
    public static void main(String[] args) {
        File sourceDir = new File("G:\工作\hadoop安装环境\资料\hadoop-client依赖jar包\repository"); // 源文件夹路径
        File targetDir = new File("G:\工作\hadoop安装环境\资料\hadoop-client依赖jar包\repository_1"); // 目标文件夹路径

        if (!targetDir.exists()) { // 如果目标文件夹不存在,则创建目标文件夹
            targetDir.mkdir();
        }

        try {
            copyDirectory(sourceDir, targetDir); // 拷贝目录
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void copyDirectory(File sourceDir, File targetDir) throws IOException {
        File[] files = sourceDir.listFiles();
        if (files != null) {
            for (File file : files) {
                File targetFile = new File(targetDir.getAbsolutePath() + File.separator + file.getName());
                if (file.isDirectory()) { // 如果是目录,递归拷贝目录
                    if (!targetFile.exists()) {
                        targetFile.mkdir();
                    }
                    copyDirectory(file, targetFile);
                } else { // 如果是文件,拷贝文件
                    if (!targetFile.exists()) {
                        Files.copy(file.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
                    }
                }
            }
        }
    }
}

最后在内网中将导入的最小环境,给合并到当前现有的repository文件夹中即可。