最近在搞一个项目,对方开发环境纯内网,搭建了nexus服务,需要把这边项目所需要的依赖导入,一个一个的来未免有些麻烦,于是乎,批量上传就成为了刚需。

由于之前也没接触过nexus,所以第一步当然就是先搭建环境了,我一般喜欢在虚拟机里面搞各种项目需要但是平时不常用的一些服务或者软件,像是SqlServer服务器还有这次的nexus服务,在官方网站下载技术文档中客户目前部署的版本,找这个安装包也是费了一定的时间,官网下载到的是最新版,而存档版本被放在了一个不起眼的角落,具体链接可以看我之前写的一个博客《nexus3历史版本下载》。不得不说这下载是真的龟速,一个午休的时间才下载下来,解压,放目录,配环境变量,改改配置文件,启动nexus服务,发现这个是需要Java运行时的,搞一个,搞定之后就跑起来了。

登录,改密码,建立本地库,在自己电脑的maven配置文件settings.xml里加入刚刚配置好的本地仓库地址,用户名还有密码,试着上传了一个jar包,还挺好,就是这个groupId什么的还得自己去输入,麻烦,还可能会出错,能用代码解决的事,就别硬要自己来,所以研究了一下这个maven命令:

mvn deploy:deploy-file -DgroupId=$groupId$ -DartifactId=$artifactId$ -Dversion=$version$ -Dpackaging=jar -Dfile=$filepath$ -Durl=$url$ -DrepositoryId=$repositoryId$

为了方便看,我就把相应的字段给替代了,懂得都懂,所以问题的关键就在于如何获取这些参数。

用过maven开发过应用的同学应该都有看过自己的本地仓库文件夹,就是和你在网上拷贝的pom坐标是一样的,举个栗子:

<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>javax.mail</artifactId>
	<version>1.6.1</version>
</dependency>

常用的Java mail,那么它在你本地的路径是:

~\com\sun\mail\javax.mail\1.6.1\javax.mail-1.6.1.jar

那么它的格式就是:

~\{groupId_part_0}\{groupId_part_1}\..\{groupId_part_n}\{artifactId}\{version}\xxx.jar

一目了然,不言而喻,所以只需要遍历本地仓库即可批量获取诸如groupId,version之类的数据了

知道了它的存储格式,剩下的就好说了,上代码:

public static void getFiles(String filePath) {
	File root = new File(filePath);
	File[] files = root.listFiles();
	for (File file : files) {
		if (file.isDirectory()) {
			getFiles(file.getAbsolutePath());
		} else {
			if (file.getName().endsWith(".jar")) {
				String full = file.getAbsolutePath();
				String total = full.replace(prefix, "");
				String[] tools = total.split("\\\\");
				int size = tools.length;
				String groupId = "";
				for (int i = 0; i < size - 3; i++) {
					groupId = groupId + tools[i] + ".";
				}
				if (groupId.equals("")) {
					continue;
				}
				Jarinfo jarinfo = new Jarinfo();
				jarinfo.setAbsolutePath(full);
				jarinfo.setGroupId(groupId.substring(0, groupId.length() - 1));
				jarinfo.setArtifactId(tools[size - 3]);
				jarinfo.setVersion(tools[size - 2]);
				Build.total++;
				test(createBat(jarinfo), jarinfo.absolutePath);
			}
		}
	}
	writeTXT(prefix, "upload.bat", content);
}

最后说一下思路:

  1. 遍历本地仓库文件夹
  2. 获取相关参数
  3. 生成脚本
  4. 通过Runtime执行脚本

这就算是“核心”代码了,还加了一些其他的东西,比如使用配置文件以及保存日志等功能,需要的自吧,下载地址:

还没有

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐