使用过Maven的开发者都会对Maven爱不释手,但是往往我们有一些旧的项目不是Maven管理的;当我们需要把普通项目转为Maven项目时,我们需要一个个把jar包转为依赖;这是非常单调、费时的,所以就写了一个普通项目转Maven项目的工具。
工具特性
- 根据jar的sha1值从配置的maven仓库查找依赖,自动生成Dependencies
- 支持多java源码项目,配置java源码目录后会自动生成Maven项目的目录
- 依赖查找支持本地字典缓存,查找到依赖后自动存入字典文件,节省下次转换时间
- 转换完成自动构建,确认项目项目是否转换正常
主要原理
如果我们平时使用nexus搭建的maven私服的话,可能会注意到有这么一个查询:
这个使用jar的校验码进行检索,校验码可以使sha1,也可以是md5,那么我们要是想根据jar文件找到对应的Maven依赖写法,可以使用这个查询接口,比如下面这个链接:
如果是浏览器打开我们会看到一个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[]]></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