Java:用于确定maven模块中每个Java类的依赖项的工具

Java:用于确定maven模块中每个Java类的依赖项的工具,java,eclipse,maven,dependencies,Java,Eclipse,Maven,Dependencies,我不知道这是不是一个我不知道的琐碎问题 在多模块maven项目中,假设有一个“公共”模块。例如,共有5个模块,其中1个模块是公共模块。是否有办法确定其他4个模块是否依赖于公共模块类,即对于公共模块中的每个类,我想知道其他模块中哪些类共同依赖于该类?(实际上,maven在这里并不重要)。 eclipse本身有这个特性吗 如果工具提供了一个诊断表示,那就太好了。据我所知,Maven不能“按类”工作,模块是其依赖项的原子元素 在eclipse/intellij enterprise edition中,

我不知道这是不是一个我不知道的琐碎问题

在多模块maven项目中,假设有一个“公共”模块。例如,共有5个模块,其中1个模块是公共模块。是否有办法确定其他4个模块是否依赖于公共模块类,即对于公共模块中的每个类,我想知道其他模块中哪些类共同依赖于该类?(实际上,maven在这里并不重要)。 eclipse本身有这个特性吗


如果工具提供了一个诊断表示,那就太好了。

据我所知,Maven不能“按类”工作,模块是其依赖项的原子元素

在eclipse/intellij enterprise edition中,您可以使用
mvn dependency:tree
来获取每个模块的依赖关系 对结果进行图形表示,但仅此而已

基本上,编译时依赖项和运行时依赖项之间必须有所不同

当然,如果您在某些类中存在“未满足”的编译时依赖关系,例如,使用Logger但在类路径中没有log4j/其他相关库,那么您将在编译类的过程中得到错误,它是编译器的工作,而不是maven的工作

现在运行时依赖项更难跟踪,例如: 如果您在某个容器内运行,并且在“提供的”范围内定义了log4j库依赖项,那么您依赖的是容器,它将把该库带到您身边,并负责所有的类加载工作。 但是maven怎么知道容器内发生了什么呢

所以,底线是,你所要求的在maven是不可能的,我已经试着解释为什么:)


希望这对Eclipse有所帮助,您只需选择要检查的类并按CTRL-SHIFT-G键即可在工作区中搜索引用。在这种情况下,这意味着您必须已打开多模块的所有模块。缺点是你需要对你想知道的每一个类都这样做。

我是开发人员之一,所以我不是没有偏见的,但我相信这非常适合你想要的。将RS101指向根POM,您将看到所有POM的依赖关系图,如下所示:

然后,您可以通过双击将任何项目扩展到您想要的任何级别,将依赖项从一个pom追踪到另一个pom。在本例中,我深入研究了Maven core,以发现Maven compat中的代码使用了什么:

您还可以使用Restructure101在pom之间重新组织类(如您提到的创建/改进公共pom),例如,通过将类拖动到新pom并查看pom级别依赖关系的效果。操作列表将导出到IDE中


配套产品Structure101具有相关的功能,值得检查,但我更喜欢您描述的Structure101

是的,我知道引用搜索,但其目的是识别不应驻留在公共模块中的类,即可能存在一个类,该类仅由另一个模块使用,而实际上不是公共类。因此,应该将该类从公共模块移到特定模块。所以这里的类不是输入,而是输出。就像maven依赖关系树在artifict\module\jar级别显示一样,我需要类级别的树。class.forName(“..”)在这里不好。