很多项目有自己封装的jar包,然后这些jar包会被广泛的用于业务的开发,这个时候需要将这个jar包放到maven仓库中以供使用,如果使用命令一个一个jar包进行上传,这种方式会浪费大量时间,能够批量上传吗?让我们拭目以待。
1.配置settings.xml
配置远程仓库的用户名和密码
<servers>
<server>
<id>develop-nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
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<GroupInfo> 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();
}
/**
* <groupId>com.alibaba.cloud</groupId>
* <artifactId>spring-cloud-alibaba-dependencies</artifactId>
* @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; i<length-3;i++){
if (i==1) sb.append(array[i]);
sb.append("."+array[i]);
}
// String artifactId = file.getParentFile().getParentFile().getName();
// return replace.substring(1,replace.indexOf(artifactId)-1).replaceAll("\\\\",".");
return sb.toString();
}
/**
* 功能:循环上传本地仓库jar包到指定的远程maven仓库
*/
public static void uploadJarToRemoteMavenRepo() {
//D:\git\ips-fj\libs>mvn 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() + '\'' +
'}';
}
}
}
文章评论