Maven pom.xml changed events listener

Answered

Hello,

 

I'm working plugin which should listen to changes in pom.xml and analyze changes in dependencies. At the current moment, we use for this 

 

projectsManager = MavenProjectsManager.getInstance(project)
projectsManager.addProjectsTreeListener(new MavenProjectsTree.Listener() {})

 

But it does not always pass the latest Maven project state dependencies. For example, if I delete one dependency it will pass as the parameter list of dependencies without my changes.

 

Could somebody help me? Which events are better to use to listen to changes in pom.xml?

 

Thank you!

 

Best regards,

Aleksandr.

 

 

 

0
3 comments

Hi Alexander. There are some steps in pom re-importing, and project reading, dependency resolving are splitted across this steps, MavenProjectTree manages  project structure, not maven dependencies.

Either you need to use org.jetbrains.idea.maven.project.MavenProjectsManager.Listener#projectImportCompleted, at this stage dependencies already resolved, or create your own org.jetbrains.idea.maven.importing.MavenImporter (just override isApplicable method if nessesary) and get all dependencies in postProcess method using org.jetbrains.idea.maven.project.MavenProject#getDependencies

You need to keep traking changes by yourself in this way.

0

Hi Alexander,

 

Thank you for this very important clarifications! 

 

About MavenProjectsManager.Listener#projectImportCompleted. I can found it here https://github.com/JetBrains/intellij-community/blob/0e87df06e9357e0fdb600033a6e3068b0e4014bd/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java#L1371 

 

But when I'm trying to implement it in my project it MavenProjectsManager.Listener doesn't have this method:

public interface Listener {
default void activated() {
}

default void projectsScheduled() {
}

default void importAndResolveScheduled() {
}
}

 

I tried to use importAndResolveScheduled() method and it works. It calls this method twice: 1 - with old dependencies, 2 - with new dependencies. Maybe you know are there any parameters by which I can understand the current state? Or maybe I need to switch some API versions?


Thank you for your time and help!

 

Best regards,
Alexander

 

0

It seems I found out how to understand on which stage method is called. If this method returns true it plans to process dependencies. If this method returns false it already processes dependencies.

 

mavenProjectsManager.hasScheduledProjects

 

Thank you for your help!

Best regards,
Alexander.

0

Please sign in to leave a comment.