上传本地jar包到nexus远程仓库

很多项目有自己封装的jar包,然后这些jar包会被广泛的用于业务的开发,这个时候需要将这个jar包放到maven仓库中以供使用,如果使用命令一个一个jar包进行上传,这种方式会浪费大量时间,能够批量上传吗?让我们拭目以待。

1.配置settings.xml

配置远程仓库的用户名和密码

    
		
			develop-nexus
			admin
			admin123
		
    

2.mvn命令推送

mvn deploy:deploy-file
-DgroupId=com.bruce
-DartifactId=test
-Dversion=1.0.1 
-Dpackaging=jar
-Dfile=jar包绝对路径
-Durl=http:xxx/nexus/content/repositories/thirdparty/   //远程仓库地址
-DrepositoryId=develop-nexus  //之前在settings.xml文件中配置的server id

Note: 上述指令在cmd中执行的时候,要放到同一行,不然无法执行 

3.批量上传

但是上述指令只能上传一个jar包到远程maven仓库,怎样批量上传呢?

写一个简单的java程序,先找出所有的jar包信息,然后循环上传每一个jar包。

记得修改里面远程仓库地址Durl 以及 server id: -DrepositoryId,当然还有jar包存放的本地maven仓库的目录

package com.bruce.mavenJar;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class UploadJarRemoteMavenRepo {
    //批量安装jar所在目录,本文已本地maven仓库为例
    public static String filePath = "F:\\java\\maven-repo";
    public static List jarList=new ArrayList<>();

    public static void main(String[] args) {
        File f = new File(filePath);
        //得到所有jar包信息,包括groupId,artifactId,version等信息
        getJarList(f);
//        jarList.forEach(System.out::println);
        //循环上传本地maven仓库jar包到远程maven仓库
        uploadJarToRemoteMavenRepo();
    }

    /**
     *   com.alibaba.cloud
     *                 spring-cloud-alibaba-dependencies
     * @param file
     */
    private static void getJarList(File file) {
        if(file.isDirectory()){
            for (File listFile : file.listFiles()) {
                getJarList(listFile);
            }
        }else if(file.getName().endsWith(".jar")){
            GroupInfo groupInfo = new GroupInfo();
            groupInfo.version=file.getParentFile().getName();
            groupInfo.artifactId=file.getParentFile().getParentFile().getName();
            groupInfo.groupId=getGroupId(file);
            groupInfo.file=file;

            //加判断,只找自己需要的jar包,不是所有的jar包都要上传到远程maven仓库,例如公共的jar包
            if (groupInfo.groupId.contains("net")){
                jarList.add(groupInfo);
            }
        }else if(file.getName().endsWith(".pom")){
            if(ifPomDir(file.getParentFile())){
                GroupInfo groupInfo = new GroupInfo();
                groupInfo.version=file.getParentFile().getName();
                groupInfo.artifactId=file.getParentFile().getParentFile().getName();
                groupInfo.groupId=getGroupId(file);
                groupInfo.isPom=true;
                groupInfo.file=file;
                //加判断,只找自己需要的jar包的pom,不是所有的jar包都要上传到远程maven仓库,例如公共的jar包
                if (groupInfo.groupId.contains("net")){
                    jarList.add(groupInfo);
                }
            }
        }
    }

    private static boolean ifPomDir(File parentFile) {
        return !Arrays.stream(parentFile.listFiles()).anyMatch(f->f.getName().endsWith(".jar"));
    }

    private static String getGroupId(File file) {
        String replace = file.getAbsolutePath().replace(filePath, "");
        String [] array = replace.split("\\\\");
        int length = array.length;
        StringBuilder sb = new StringBuilder();
        for (int i=1; imvn install:install-file -Dfile=ips-data-core-0.0.1-SNAPSHOT.jar -DgroupId=boco -DartifactId=ips-data-core  -Dversion=0.0.1-SNAPSHOT  -Dpackaging=pom
        //mvn install:install-file -DgroupId=com.xxx -DartifactId=xxx -Dversion=1.1.1 -Dpackaging=pom -Dfile=xxx-1.1.1.pom
        jarList.forEach(jar->{
            System.out.println("导入jar到本地仓库"+jar);
            String sb = "mvn deploy:deploy-file -Dfile="+jar.file.getAbsolutePath()
                    +" -DgroupId="+jar.groupId
                    +" -DartifactId="+jar.artifactId
                    +" -Dversion="+jar.version
                    +" -Dpackaging="+(jar.isPom?"pom":"jar")
                    +" -Durl=http:xxx/nexus/content/repositories/thirdparty/"
                    +" -DrepositoryId=develop-nexus";
            System.out.println(sb);
            execCommandAndGetOutput(sb);
        });
    }

    public static void execCommandAndGetOutput(String comond) {
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec("cmd.exe /c "+comond);
            // 输出结果,必须写在 waitFor 之前
            String outStr = getStreamStr(process.getInputStream());
            // 错误结果,必须写在 waitFor 之前
            String errStr = getStreamStr(process.getErrorStream());
            int exitValue = process.waitFor(); // 退出值 0 为正常,其他为异常
            System.out.println("exitValue: " + exitValue);
            System.out.println("outStr: " + outStr);
            System.out.println("errStr: " + errStr);
            process.destroy();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static String getStreamStr(InputStream is) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(is, "GBK"));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
            sb.append("\n");
        }
        br.close();
        return sb.toString();
    }

    static class GroupInfo {
        String artifactId;
        String version;
        String groupId;
        Boolean isPom = false;
        File file;

        @Override
        public String toString() {
            return "GroupInfo{" +
                    "artifactId='" + artifactId + '\'' +
                    ", version='" + version + '\'' +
                    ", groupId='" + groupId + '\'' +
                    ", filename='" + file.getName() + '\'' +
                    '}';
        }
    }
}

你可能感兴趣的:(Java,maven)