当前位置: 首页 > 知识库问答 >
问题:

对于一个大项目的源代码,我们如何处理Spoon的源代码分析中的“xxx类型已经定义”?

邢永安
2023-03-14

在使用spoon分析Hadoop这样的大项目的源代码时,经常会出现“已经定义了xxx类型”的问题,因为不同的子项目中可能存在具有相同类名和相同包目录的Java类。

当我运行“java-cp xx spoon.launcher-I~/hadoop-0.23.3-src/-p myspoon.catchprocessor”时,出现了以下错误。

Exception in thread "main" spoon.compiler.ModelBuildingException: The type JobInProgress is already defined
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.reportProblem(JDTBasedSpoonCompiler.java:550)
    at spoon.support.compiler.jdt.TreeBuilderRequestor.acceptResult(TreeBuilderRequestor.java:37)
    at spoon.support.compiler.jdt.TreeBuilderCompiler.buildUnits(TreeBuilderCompiler.java:73)
    at spoon.support.compiler.jdt.JDTBatchCompiler.getUnits(JDTBatchCompiler.java:120)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildUnits(JDTBasedSpoonCompiler.java:410)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildUnitsAndModel(JDTBasedSpoonCompiler.java:372)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildSources(JDTBasedSpoonCompiler.java:348)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:119)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:102)
    at spoon.Launcher.buildModel(Launcher.java:700)
    at spoon.Launcher.run(Launcher.java:651)
    at spoon.Launcher.run(Launcher.java:106)
    at spoon.Launcher.main(Launcher.java:99)

我发现在同一个子项目“Hadoop-MapReduce-Project”中有两个jobinProgress.java

./hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/JobInProgress.java
./hadoop-mapreduce-project/src/java/org/apache/hadoop/mapred/JobInProgress.java
Exception in thread "main" spoon.compiler.ModelBuildingException: The import org.apache.hadoop.conf cannot be resolved at xxx

共有1个答案

路金鑫
2023-03-14

像Hadoop这样的项目定义有几个子模块独立编译:那么您不能将整个源代码视为一个大项目。

Spoon不是为支持带有子模块的maven项目而设计的,因此您必须将每个子模块独立提交给Spoon,但在这样做时必须尊重模块层次结构,更重要的是,您必须使用正确的类路径:例如,如果模块A依赖于模块B,那么在分析A时不要忘记传递B.jar

 类似资料:
  • 我想潜入CN1的Soures。我已经使用Git遵循了这个和这个教程。然而,在NetBeans中,当我用Ctrl键单击CN1对象时,它显示“显示生成的源文件。没有源附加到类'JAR文件‘。”如果我附上我刚刚下载的ie“CodenameOne/CodenameOne/src”的源代码,源代码仍然找不到! 任何帮助都很感激, 问候

  • 问题内容: 我想知道如何分析我的代码。 我已经阅读了文档,但是由于没有给出示例,因此无法获得任何帮助。 我的代码很大,需要很多时间,因此我想介绍一下它并提高其速度。我没有用方法编写代码,介于两者之间但很少。我的代码中没有任何主要内容。我想知道如何使用分析。我正在寻找有关如何配置文件的一些示例或示例代码。 我尝试了psyco,即在代码顶部添加了两行: 这是正确的吗?它没有显示任何改善。还有其他加快方

  • 在你的代码合并,压缩或编译后,保持客户端代码可读性和可调试性。使用Source Maps(源码映射)将源代码映射到已编译的代码。 TL;DR 使用Source Maps(源码映射)将压缩代码映射到源代码。然后,您可以在其原始源代码中读取和调试编译的代码。 仅使用能够生成Source Maps(源码映射)的预处理器。 验证您的web 服务器是否可以为Source Maps(源码映射)提供服务。 开始

  • 问题内容: 我必须打印Java项目的整个源代码。最终版本应如下所示: Eclipse:File- > Print。但是使用此功能,您一次只能打印一个文件。 有没有一种方法可以使用一个命令打印(或创建pdf / rtf)整个项目(所有 .java,。xml,…文件)? 我在Windows XP SP3上使用Eclipse Galileo 编辑: 对于每个类/文件,页面应(或多或少)如下所示: C:\

  • 假设我试图从使用基本身份验证/基本证书的RESTful api中提取,那么在我的程序中存储用户名和密码的最佳方式是什么?现在它只是以明文形式存在。 有没有更安全的方法? 谢啦

  • 问题内容: 我目前在一个项目中,其中的代码中有大约3000行的SQL字符串。 该项目是一个Java项目,但是这个问题可能适用于任何语言。 无论如何,这是我第一次见到如此糟糕的东西。该代码库是遗留的,因此我们可以突然迁移到Hibernate或类似的东西。 您该如何处理非常大的SQL字符串? 我知道这很不好,但是我不知道建议什么是最好的解决方案。 问题答案: 在我看来,将那些硬编码的值放入存储过程中,