Как мы имеем дело с "типом xxx уже определен" в анализе исходного кода ложки для исходного кода большого проекта?

Когда мы используем ложку для анализа исходного кода большого проекта, такого как 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)

И я нахожу, что есть два JobInProgress.java в одном и том же подпроекте "hadoop-mapreduce-project "

./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 ответ

Решение

Такие проекты, как Hadoop, определяются несколькими подмодулями, компилируемыми независимо: тогда вы не можете рассматривать весь исходный код как один большой проект.

Spoon не предназначен для поддержки проекта maven с подмодулями, поэтому вы должны отправлять каждый подмодуль в Spoon независимо, но при этом вы должны соблюдать иерархию модулей, и, что более важно, вы должны использовать правильный путь к классу: например, если модуль A зависит от модуля Bтогда не забудь пройти B.jar когда вы анализируете A,

Другие вопросы по тегам