The Maven Сканер хранилища обрабатывает все артефакты в изоляции, т.е. зависимости между ними не вычисляются при сканировании классов.
Это то же поведение, что и сканирование нескольких файлов JAR из каталога, поэтому зависимости между классами (вызовы методов, иерархии наследования и т. Д.) Разрешаются только в том случае, если участвующие классы находятся внутри одного и того же артефакта.
Поскольку зависимости между артефактами известны в случае репозитория Maven, должно быть возможно применить запросы, которые разрешают эти зависимости, похожие на понятия «classpath: *», но это необходимо оценить.
Update
Следующие запросы должны помочь получать зависимости на основе класса (DEPENDS_ON) между классами в различных артефактов:
Сложение DEPENDS_ON отношения между артефактами на основе объявляемых зависимостей в РОМ:
MATCH
(r:Repository)-[:CONTAINS_POM]->(p1:Pom)-[:DESCRIBES]->(a1:Java:Archive),
(r:Repository)-[:CONTAINS_POM]->(p2:Pom)-[:DESCRIBES]->(a2:Java:Archive),
(p1)-[:DECLARES_DEPENDENCY]->(a2)
MERGE
(a1)-[:DEPENDS_ON]->(a2)
RETURN
a1.fqn, collect(a2.fqn)
Устанавливать типы, требуемые артефактом, для объектов, содержащихся в артефакте, который является зависимостью, создается отношение RESOLVES_TO:
MATCH
(a1:Artifact)-[:DEPENDS_ON]->(a2:Artifact),
(a1)-[:REQUIRES]->(requiredType:Type),
(a2)-[:CONTAINS]->(containedType:Type)
WHERE
requiredType.fqn = containedType.fqn
MERGE
(requiredType)-[:RESOLVES_TO]->(containedType)
RETURN
a1.fqn, a2.fqn, collect(requiredType.fqn)
Propagate DEPENDS_ON отношения между типами на основе RESOLVES_TO соотношения:
MATCH
(a1:Artifact)-[:REQUIRES]->(requiredType:Type),
(a1)-[:CONTAINS]->(type:Type)-[:DEPENDS_ON]->(requiredType),
(a2:Artifact)-[:CONTAINS]->(resolvedType:Type),
(requiredType)-[:RESOLVES_TO]->(resolvedType:Type)
MERGE
(type)-[dependsOn:DEPENDS_ON]->(resolvedType)
SET
dependsOn.resolved=true
RETURN
a1.fqn, type.fqn, a2.fqn, collect(resolvedType.fqn)
ли эта работа для вас?
Спасибо. На самом деле было бы здорово использовать структуру репозитория Maven (особенно POM), чтобы избежать «дублированных узлов». Тогда было бы намного легче найти архитектурные проблемы в нашей крупной компании Maven repo. –
Благодарим за быстрое обновление. В настоящее время я жду второго запроса (занимает некоторое время в базе данных 144 ГБ ...). Я нахожусь в отпуске на следующей неделе, а затем я приеду в Дрезден для вашего семинара, так что не ждите от меня ответа слишком рано. –