我是我公司的一个新的配置经理,我正在启动一个项目来清理我们大部分的构建过程。
我们在一个颠覆项目中放置了大量的罐子。有些人将这些罐子复制到他们的项目中。其他人则在他们的项目上放置了一个SVN:External到这个目录。其他人在这些罐子里有一种复杂的复制方式。这是我们应该使用的唯一的罐子。
我要搬去艾薇也许去梅文。我已经设置了一个Maven存储库,并确定了这些jar的GroupId、ArtifactId和版本,并记录了如何通过Ivy和Maven配置访问所需的存储库。
我想查看所有项目的源文件,查找所有导入语句,并将这些导入与这些jars包含的所有类进行比较。
我想找到给定的一组源直接调用的所有jars。例如,如果一个jar包含:
import org.apache.commons.beanutils.*我知道它需要commons-beanutils.jar (版本1.6)。我也知道它需要Common-logging.jar,但是我会让Maven和Ivy来处理这个问题。我只想告诉开发人员,当他们创建他们的pom.xml或ivy.xml时,他们需要在他们的pom.xml或ivy.xml文件中包含common-beanutils#common-beansutil#1.6。
我知道这不会是一个完整的名单。我知道运行时需要jars,但不需要编译。我也知道有些类可以使用多个jars。我现在还可以让开发人员这样做:
import org.apache.commons.*;会和几十个罐子相配却什么都不告诉我。(也许有一种方法可以找出Java源文件中实际使用的类)。
我可以编写一个Python或Perl脚本来完成这个任务,但我希望已经有了一些东西,可以节省我几个小时的工作。我知道TattleTale的JBoss,但文档似乎说它只适用于jars,并显示了jars之间的依赖关系等等。我只想知道我们的源代码正在调用什么jars,让Ivy和Maven处理更深层次的依赖关系。
有这样的工具吗?
附录
说得更具体点。这是个老工程。事实上,大约有50个项目。我们知道,一个特定的项目需要20个jars才能运行,而像TattleTail这样的工具可以遍历并向您展示整个数据分析。
但是,让我们从开发人员的角度来看它。我遇到了一个问题,我找到了一个开源项目来解决我的问题。我阅读了文档,编写了我的代码,并导入了我需要的类。我知道包含类的开源项目的jar,这是我所知道的几乎全部。
我想要做的是回到最初的开发人员的心态:我在这个项目中使用了这些类,我需要这5个jars。这5个jars可能还需要另外15个才能运行,这是Ivy/Maven现在将要处理的问题。我们知道程序需要的20个罐子。我只想要开发人员在代码中最初提到的5。
这是为了帮助开发人员编写他们的pom.xml或ivy.xml。我不希望他们把所有的20个罐子都放进那个pom.xml或那个ivy.xml文件--只是他们需要的五个。
这只是一个起点。他们可能已经导入了com.foo.bar.bar.foo,这个类在foo-all.jar、foo-client.jar和bar-talk.com中。开发人员将不得不决定他们的项目需要哪一个。
这是我们编程中的一个巨大的范式转变,但我们正在失去jars和版本的跟踪,并确保所有这些项目都能相互交流。使用Ivy/Maven将大大简化这一混乱。
发布于 2012-09-21 17:53:52
最后,塔特莱给了我第一级依赖项,这就是我构建ivy.xml或pom.xml文件所需要的。它偶尔会错过一两次,但否则效果会很好。
https://stackoverflow.com/questions/11977409
复制相似问题