近期有个项目大量需要一些jar包,在私服上找不到,用java+mvn命令批量将jar包上传到私服 上传需要 GAV坐标和jar路径(最后是绝对路径) java代码做处理参数,然后调取bat命令,执行mvn命令 jar包命名格式通常为A-V[-classfiler].jar
public class tt { public static void main(String[] args) throws IOException { BufferedReader br = null; //jar包统一放在这个目录下面 File file=new File("D:\\lib"); String tef="F:\\test\\test.bat"; File[] fs = file.listFiles(); for (File f : fs) { if(f.isFile()){ String path=f.getAbsolutePath(); String _artifactId = f.getName().substring(0,f.getName().lastIndexOf("-")); String _version=f.getName().substring(f.getName().lastIndexOf("-")+1, f.getName().lastIndexOf(".")); // String[] cmds={tef,path,_artifactId,_version}; //processBuilder用法可自行百度,这里用为打开cmd执行命令 ProcessBuilder pb = new ProcessBuilder(cmds); pb.redirectErrorStream(true); Process p; p = pb.start(); String result = ""; br = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((result = br.readLine()) != null) { if(result.trim().endsWith(" KB") || result.trim().endsWith(" B")){ continue; } System.out.println(result); } br.close(); p.destroy(); pb.directory(); } } }processBuild处理也可以用下面这个类(已封装)
//mvnScript为执行的mvn命令 public static void uploadXmlByMvn(String mvnScript){ boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows"); try { ProcessBuilder builder = new ProcessBuilder(); if (isWindows) { builder.command("cmd.exe", "/c", mvnScript); } else { builder.command("sh", "-c", mvnScript); } builder.directory(new File(System.getProperty("user.home"))); Process process = builder.start(); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String result = ""; while ((result = br.readLine()) != null) { System.out.println(result); } }catch (Exception e) { e.printStackTrace(); } }最后执行的bat命令如下,第一个代码调取时会传四个参数过来,会将第一个bat路径作为第一个参数,所以这里不取,参数从第二个开始(%~1),下面的一个参数 仓库id可以打开私服找到如下图所示处
echo off set _FILEPATH=%~1 set _artifactId=%~2 set _VERSION=%~3 mvn deploy:deploy-file -Dfile=%_FILEPATH% -DgroupId=com.yss -DartifactId=%_artifactId% -Dversion=%_VERSION% -Dpackaging=jar -DrepositoryId=仓库id -Durl=仓库地址这里没有指定maven配置文件setting.xml文件,会默认选择mavan的setting.xml,如需自行设置,可以 -s 配置文件名 在settings.xml文件中需要配置,私服的账号密码。