欢迎光临
我们一直在努力

普通项目转Maven项目工具

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

工具特性

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

主要原理

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

普通项目转Maven项目工具

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

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

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

普通项目转Maven项目工具

关键代码

配置文件
<?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中配置的检索仓库的范围,否则构建项目时会找不到依赖。

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《普通项目转Maven项目工具》
文章链接:https://www.456zj.com/38240.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址