Skip to content

WST unable to update Maven configuration: Version 8 of project facet java does not exist. #26

Open
@garretwilson

Description

@garretwilson

I upgraded to Eclipse EE 2023-06 RC1 (4.28.0 RC1) on Windows 10 and things started breaking. (This issue was first reported at eclipse-m2e/m2e-core#1414 but I was told that this is related to WST.)

In my long-running https://github.com/globalmentor/globalmentor-root project I have a pom.xml for Java 8 with the following line:

<maven.compiler.release>8</maven.compiler.release> <!-- JDK 9+ required to build -->

The correct value for <maven.compiler.release> is 8. See Setting the --release of the Java Compiler.

This is a Java compiler 9+ option (why it's needed is a long story), but there shouldn't be any problem with that. I'll just use a JDK version 9+ when building. And in fact in Eclipse I have the following JRE registered:

openjdk 17.0.4 2022-07-19
OpenJDK Runtime Environment Temurin-17.0.4+8 (build 17.0.4+8)
OpenJDK 64-Bit Server VM Temurin-17.0.4+8 (build 17.0.4+8, mixed mode, sharing)

I have another project https://github.com/globalmentor/globalmentor-base which uses globalmentor-root as its parent. In Eclipse EE 2023-06 if I try to refresh the project using Alt+F5, it tells me:

Unable to update Maven configuration
Could not update project globalmentor-management configuration
Version 8 of project facet java does not exist.
Could not update project globalmentor-core configuration
Version 8 of project facet java does not exist.

What does that mean? It has something to do with <maven.compiler.release>8</maven.compiler.release> in the globalmentor-root project, because if I change it to <maven.compiler.release>11/maven.compiler.release>, then suddenly I can refresh globalmentor-base.

But I want to release those two libraries for Java 8, not Java 11. It shouldn't matter that a JDK 9+ is required to build it.

Are you suddenly using the <maven.compiler.release>8/maven.compiler.release> to restrict the JDK used to build the project? The maven.compiler.release flag is to determine the target API, not to restrict the JDK being used to build the project. See JEP 247: Compile for Older Platform Versions.

Note that I have both globalmentor-root and globalmentor-base in my workspace, both set to -SNAPSHOT versions (minor upgrades).

This was working on Eclipse 2023-3 and for years earlier. If I can't find a way around this I'm going to have to roll back.

Here's a stack trace. Interestingly it mentions globalmentor-core and globalmentor-management, which are subprojects of globalmentor-base:

!ENTRY org.eclipse.m2e.core.ui 4 -1 2023-06-06 10:39:34.546
!MESSAGE Unable to update Maven configuration
!SUBENTRY 1 org.eclipse.m2e.core 4 0 2023-06-06 10:39:34.546
!MESSAGE Could not update project globalmentor-management configuration
!STACK 0
java.lang.IllegalArgumentException: Version 8 of project facet java does not exist.
	at org.eclipse.wst.common.project.facet.core.util.internal.Versionable.getVersion(Versionable.java:80)
	at org.eclipse.wst.common.project.facet.core.internal.ProjectFacet.getVersion(ProjectFacet.java:1)
	at org.eclipse.m2e.wtp.WTPProjectsUtil.installJavaFacet(WTPProjectsUtil.java:482)
	at org.eclipse.m2e.wtp.UtilityProjectConfigurator.configure(UtilityProjectConfigurator.java:65)
	at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:123)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$6(ProjectConfigurationManager.java:504)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:498)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$4(ProjectConfigurationManager.java:426)
	at java.base/java.util.Collection.removeIf(Collection.java:576)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration0(ProjectConfigurationManager.java:414)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$3(ProjectConfigurationManager.java:340)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:214)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1097)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:339)
	at org.eclipse.m2e.core.ui.internal.UpdateMavenProjectJob.runInWorkspace(UpdateMavenProjectJob.java:80)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
!SUBENTRY 1 org.eclipse.m2e.core 4 0 2023-06-06 10:39:34.546
!MESSAGE Could not update project globalmentor-core configuration
!STACK 0
java.lang.IllegalArgumentException: Version 8 of project facet java does not exist.
	at org.eclipse.wst.common.project.facet.core.util.internal.Versionable.getVersion(Versionable.java:80)
	at org.eclipse.wst.common.project.facet.core.internal.ProjectFacet.getVersion(ProjectFacet.java:1)
	at org.eclipse.m2e.wtp.WTPProjectsUtil.installJavaFacet(WTPProjectsUtil.java:482)
	at org.eclipse.m2e.wtp.UtilityProjectConfigurator.configure(UtilityProjectConfigurator.java:65)
	at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:123)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$6(ProjectConfigurationManager.java:504)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:498)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$4(ProjectConfigurationManager.java:426)
	at java.base/java.util.Collection.removeIf(Collection.java:576)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration0(ProjectConfigurationManager.java:414)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$3(ProjectConfigurationManager.java:340)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:214)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1097)
	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:339)
	at org.eclipse.m2e.core.ui.internal.UpdateMavenProjectJob.runInWorkspace(UpdateMavenProjectJob.java:80)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Currently my workaround is:

  1. Go to globalmentor-root and set <maven.compiler.release>11/maven.compiler.release>.
  2. Go to globalmentor-base and use Alt+F5 to refresh the Maven project.
  3. Go back to globalmentor-root and set <maven.compiler.release>8/maven.compiler.release> as it was before.

Apparently this is sneaky enough that the new Eclipse doesn't notice and doesn't complain. I'll cross my fingers to see if it continues to work.

Unfortunately this means I'll need need to go through those workaround steps again if I ever need to refresh the globalmentor-base Maven project in Eclipse again.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions