Why is Eclipse hitting an NPE updating my Maven project?

Viewed 144

I'm trying to split a maven project into submodules. It builds fine on the command-line, but when imported into eclipse I get the following error after a while, and then I'm forced to reimport the project.

The project struture is

  • my-app
    • my-legacy-app
    • my-app-shared

It appears that eclipse is hitting an NPE when determining paths when updating the maven project. Where do I go from here to resolve this?

2020-10-20 15:23:12,368 [Worker-13: Updating maven profiles] WARN  o.e.m.c.p.c.AbstractLifecycleMapping - Could not update project my-legacy-app configuration
java.lang.NullPointerException: null
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.getProjectRelativePath(AbstractJavaProjectConfigurator.java:788) ~[na:na]
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.getOtherResourceFolders(AbstractJavaProjectConfigurator.java:535) ~[na:na]
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.overlapsWithOtherResourceFolder(AbstractJavaProjectConfigurator.java:520) ~[na:na]
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.addResourceDirs(AbstractJavaProjectConfigurator.java:475) ~[na:na]
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.addProjectSourceFolders(AbstractJavaProjectConfigurator.java:341) ~[na:na]
    at org.eclipse.m2e.jdt.internal.AbstractJavaProjectConfigurator.configure(AbstractJavaProjectConfigurator.java:156) ~[na:na]
    at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:122) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$2(ProjectConfigurationManager.java:511) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:179) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:153) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:505) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration0(ProjectConfigurationManager.java:443) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$1(ProjectConfigurationManager.java:358) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:179) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:153) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:101) ~[na:na]
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1370) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:357) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:343) ~[na:na]
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:325) ~[na:na]
    at org.eclipse.m2e.profiles.core.internal.management.ProfileManager.updateActiveProfiles(ProfileManager.java:86) ~[na:na]
    at org.eclipse.m2e.profiles.ui.internal.actions.ProfileSelectionHandler$UpdateProfilesJob.runInWorkspace(ProfileSelectionHandler.java:320) ~[na:na]
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42) ~[na:na]  
1 Answers

I ended up grabbing the source code to m2e and debugging my Eclipse instance, putting a breakpoint on AbstractJavaProjectConfigurator.getProjectRelativePath() to directly examine the source of the NPE.

The cause ended up being a missing <directory>...</directory> element within a <resource>...</resource> element. I didn't find it earlier because m2e/Eclipse didn't surface any context for the error.

Related