普通项目转Maven项目工具

使用过Maven的开发者都会对Maven爱不释手,但是往往我们有一些旧的项目不是Maven管理的;当我们需要把普通项目转为Maven项目时,我们需要一个个把jar包转为依赖;这是非常单调、费时的,所以就写了一个普通项目转Maven项目的工具。

工具特性

  • 根据jar的sha1值从配置的maven仓库查找依赖,自动生成Dependencies
  • 支持多java源码项目,配置java源码目录后会自动生成Maven项目的目录
  • 依赖查找支持本地字典缓存,查找到依赖后自动存入字典文件,节省下次转换时间
  • 转换完成自动构建,确认项目项目是否转换正常

主要原理

如果我们平时使用nexus搭建的maven私服的话,可能会注意到有这么一个查询:

这个使用jar的校验码进行检索,校验码可以使sha1,也可以是md5,那么我们要是想根据jar文件找到对应的Maven依赖写法,可以使用这个查询接口,比如下面这个链接:

http://maven.oschina.net/service/local/lucene/search?_dc=1452678089147&sha1=600752f7b692a5d46a497aa5a8ef1873864338df

如果是浏览器打开我们会看到一个xml,仔细查看不难发现其中的dependency需要的元素。

关键代码

配置文件
<?xml version="1.0" encoding="UTF-8"?>
<com.whaty.util.convertMaven.bean.Config>
	<!-- 源项目配置 -->
	<sourceProject>
		<!-- 源项目根路径 -->
		<basePath>F:\workspace\sourceProject</basePath>
		<!-- 源项目webRoot目录 -->
		<webRoot>WebContent</webRoot>
		<!-- 源项目java文件,多源码目录配置多个即可 -->
		<javaDirs>
			<string>src</string>
			<string>sns</string>
		</javaDirs>
		<!-- 源项目配置文件目录 -->
		<resDirs>
			<string>src</string>
			<string>sns</string>
		</resDirs>
	</sourceProject>
	<!-- 目标项目配置 -->
	<descProject>
		<!-- 目标项目根路径,新项目输出路径 -->
		<basePath>F:\workspace\descProject</basePath>
		<groupId>com.whaty</groupId>
		<artifactId>ccTestM001</artifactId>
	</descProject>
	<!-- 检索jar包的url地址,可配置多个 -->
	<searchJarUrls>
		<string><![CDATA[http://192.168.20.31/nexus/service/local/lucene/search?_dc=1443060145021&sha1=]]></string>
		<string><![CDATA[http://maven.oschina.net/service/local/lucene/search?_dc=1443060145021&sha1=]]></string>
	</searchJarUrls>
	<!-- 是否根据jar包名称检索 -->
	<searchByName>false</searchByName>
</com.whaty.util.convertMaven.bean.Config>

说明:

  • javaDirs:java源码目录,如果是src,它在新项目中的目录默认是/src/main/java/;其他目录比如sns在新项目中的目录是/src/sns/java/
  • resDirs:配置文件目录,src目录在新项目中的目录会默认是/src/main/resources/;其他目录比如sns在新项目中的目录是/src/sns/resources/
  • searchJarsUrls:值是ture/false,如果为true当根据sha1值查找不到时,会根据jar名称模糊查找,目前根据名称查找的方式比较不准确,建议设置为false
根据jar包查找依赖:先在字典中查找,如果找不到就使用sha1在所有配置的私服中查找。代码如下
public String getDependenciesXml(List<File> jars) {
	log.info("开始 依赖查找");
	StringBuffer xml = new StringBuffer();
	for (File jar : jars) {
		try {
			String sha1 = Sha1Util.getFileSha1(jar);
			// 根据sha1在字典中查找
			String dependencyXml = this.getDependencyByDict(sha1);
			// 根据sha1联网查找
			if (StringUtils.isBlank(dependencyXml)) {
				dependencyXml = this.getDependencyByNexus(sha1);
			}
			// 根据artifactId和version联网查找
			if (StringUtils.isBlank(dependencyXml)) {
				dependencyXml = this.getDependencyByArtifact(jar);

			}

			if (StringUtils.isBlank(dependencyXml)) {
				this.unFoundJars.add(jar.getName());
				log.error("添加依赖 " + String.format("%-50s", jar.getName()) + " 失败.");
				this.failJars++;
			} else {
				xml.append(dependencyXml);
				log.info("添加依赖 " + String.format("%-50s", jar.getName()) + " 成功.");
				this.sucJars++;
			}
		} catch (Exception e) {
			this.unFoundJars.add(jar.getName());
			log.error("添加依赖 " + String.format("%-50s", jar.getName()) + " 失败.");
			this.failJars++;
		}
	}

	// 记录未检测到的jar文件
	if (this.unFoundJars.size() > 0) {
		try {
			this.unFoundJarLogFile.createNewFile();
			FileUtils.writeLines(this.unFoundJarLogFile, this.unFoundJars);
		} catch (IOException e) {
			log.error("未检测到的jar写入文件失败");
		}
	}

	log.info("完成 依赖查找");
	return xml.toString();
}

注意:在pom模板中配置的repositories范围应该不小于在config.xml中配置的检索仓库的范围,否则构建项目时会找不到依赖。

下载地址:http://pan.baidu.com/s/1nuiQTct 密码:pl13

posted @ 2016-01-13 17:57  码农人生路  阅读(472)  评论(0编辑  收藏  举报