java查找哪些jar与哪些java源文件一起使用

时间:2012-08-15 21:13:22

标签: java jar

我是公司的新配置经理,我正在启动一个清理大部分构建过程的项目。

我们已经在一个Subversion项目中收集了大量的罐子。有些人将这些罐子复制到他们的项目中。其他人在他们的项目中将SVN:External放到了这个目录中。其他人在这些罐子里有一种复杂的复制方式。这些是我们想要使用的唯一的罐子。

我要搬到常春藤,也许转到Maven。我已经设置了一个Maven存储库,并且已经识别出这些jar的GroupId,ArtifactId和Version,并且已经记录了如何通过Ivy和Maven配置访问你需要的那些。

我想查看所有项目的源文件,找到所有的import语句,并将这些导入与这些jar包含的所有类进行比较。

我想找到一组给定来源直接调用的所有罐子。例如,如果jar包含:

import org.apache.commons.beanutils.*

我知道它需要commons-beanutils.jar(版本1.6)。我也知道它需要commons-logging.jar,但我会让Maven和Ivy处理这个问题。我只是想告诉开发人员他们创建pom.xmlivy.xml时,他们需要在common-beanutils#common-beansutil#1.6pom.xml文件中加入ivy.xml。< / p>

我知道这不是一个完整的清单。我知道运行时需要jar,但不能编译。我也知道有些类可以使用多个罐子。我现在也开发人员可以这样做:

import org.apache.commons.*;

这将与几十个罐子相匹配,什么也不告诉我。 (也许有办法弄清楚Java源文件中实际使用了哪些类。)

我可以编写一个可能会执行此操作的Python或Perl脚本,但我希望已经有一些东西可以节省我几个小时的工作量。我知道JBoss的TattleTale,但文档似乎说它只适用于jar并显示jar之间的依赖关系等等。我对此并不感兴趣。我只想知道我们的来源正在调用哪些罐子,让Ivy和Maven处理更深层次的依赖。

任何此类工具?


附录

更具体一点。这是一个古老的项目。事实上,有50个左右的项目。我们知道一个特定的项目需要运行20个罐子,像TattleTail这样的工具可以通过并向您展示整个数据分析。

但是,让我们从开发人员的角度来看待它。我有一个问题,我找到了一个可以解决我的问题的开源项目。我阅读了文档,编写了我的代码并导入了我需要的类。我知道包含这些类的开源项目的jar,这就是我所知道的。

我想要做的是回到原始开发人员的心态:我在这个项目中使用了这些类,我需要这些5个罐子。那些5个罐子可能还需要另外15个罐子,这是Ivy / Maven现在要处理的东西。我们知道该计划需要的20个罐子。我只想要开发人员最初在他们的代码中引用的那个。

这是为了帮助开发人员撰写他们的pom.xmlivy.xml。我不希望他们将所有20个罐子放在pom.xmlivy.xml文件中 - 只需要他们需要的五个。

这只是一个起点。他们可能已导入com.foo.bar.bar.foo,该类位于foo-all.jarfoo-client.jarbar-talk.com。开发人员必须决定他们的项目需要哪一个。

这是我们的编程中的一个巨大的范例转换,但我们正在失去对jar和版本的跟踪,并确保所有这些项目可以相互通信。使用Ivy / Maven将大大简化这种混乱。

1 个答案:

答案 0 :(得分:1)

Tattletale最终给了我第一级依赖项,这是构建我的ivy.xmlpom.xml文件所需要的。它偶尔会错过一两个,但除此之外它的效果非常好。