4

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

我们在一个 Subversion 项目中存放了大量的罐子。有些人将这些 jar 复制到他们的项目中。其他人将他们项目中的 SVN:External 放到此目录中。其他人在这些罐子中复制的方式很复杂。这些是我们假设使用的唯一罐子。

我要搬到常春藤,也许还要搬到 Maven。我已经设置了一个 Maven 存储库,并确定了这些 jar 的 GroupId、ArtifactId 和 Version,并记录了如何通过 Ivy 和 Maven 配置访问您需要的那些。

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

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

import org.apache.commons.beanutils.*

我知道它需要 commons-beanutils.jar(1.6 版)。我也知道它需要 commons-logging.jar,但我会让 Maven 和 Ivy 处理这个问题。我只想告诉开发人员当他们创建他们的pom.xmlor时ivy.xml,他们需要包含common-beanutils#common-beansutil#1.6在他们的pom.xmlorivy.xml文件中。

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

import org.apache.commons.*;

这将与几十个罐子相匹配,什么也不告诉我。(也许有一种方法可以确定 Java 源文件中实际使用了哪些类)。

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

有没有这样的工具?


附录

只是为了更具体。这是一个老项目。事实上,有50个左右的项目。我们知道一个特定的项目需要 20 个 jars 才能运行,而 TattleTail 等工具可以通过并向您展示整个数据分析。

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

我要做的是回到最初开发者的心态:我在这个项目中使用了这些类,我需要这5个jar。这 5 个 jar 可能需要另外 15 个才能运行,这是 Ivy/Maven 现在将处理的事情。我们知道程序需要的 20 个罐子。我只想要开发人员最初在他们的代码中提到的 5 个。

这是为了帮助开发人员编写他们的pom.xmlor ivy.xml. 我不希望他们将所有 20 个罐子都放在那个pom.xml或那个ivy.xml文件中——只是他们需要的五个。

This is just a starting point. They might have imported com.foo.bar.bar.foo and that class is in foo-all.jar, foo-client.jar, and bar-talk.com. The developers will have to decide which one of these their project needs.

This is a massive paradigm shift in our programming, but we are losing track of jars and versions, and making sure all of these projects can talk to each other. Using Ivy/Maven will greatly simplify this mess.

4

1 回答 1

1

Tattletale ended up giving me the first level of dependencies which is what I need to build my ivy.xml or pom.xml file. It misses one or two occasionally, but otherwise it works pretty good.

于 2012-09-21T17:53:52.610 回答