diff --git a/MAVEN4_UPGRADE_NOTES.md b/MAVEN4_UPGRADE_NOTES.md
new file mode 100644
index 0000000000..5ca6833397
--- /dev/null
+++ b/MAVEN4_UPGRADE_NOTES.md
@@ -0,0 +1,178 @@
+# Maven 4 Upgrade Notes for m2e
+
+This document describes the changes made to upgrade m2e's embedded Maven runtime from Maven 3.9.11 to Maven 4.0.0-rc-4.
+
+## Compatibility Issues
+
+- MavenCLI --> Constants
+- LifecycleExecutionPlanCalculator -> changed signatures
+- org.apache.maven.shared.utils.StringUtils -> replace
+- ReadonlyMavenExecutionRequest implements MavenExecutionReques --> needs to be part of runtime!
+- ExtensionResolutionException --> convert to plexus one helper method in runtime
+- ProjectSorter --> catch generic exception
+
+
+
+## Changes Made
+
+### 1. Maven Runtime Bundle (org.eclipse.m2e.maven.runtime)
+
+#### Version Update
+- Updated `maven-core.version` from `3.9.11` to `4.0.0-rc-4`
+- Updated bundle version from `3.9.1100-SNAPSHOT` to `4.0.004-SNAPSHOT`
+
+#### Dependency Changes
+
+**Removed Dependencies:**
+- `org.fusesource.jansi:jansi` - Replaced with `org.jline:jansi-core` (Maven 4 uses JLine's jansi)
+- `org.apache.maven:maven-slf4j-provider` - Replaced with `org.apache.maven:maven-logging`
+- `org.apache.maven.resolver:maven-resolver-transport-http` - Replaced with `maven-resolver-transport-jdk`
+
+**Added/Updated Dependencies:**
+- `org.apache.maven:maven-logging:4.0.0-rc-4` - New Maven 4 logging module
+- `org.apache.maven:maven-compat:4.0.0-rc-4` - Backward compatibility layer for Maven 3 APIs
+- `org.jline:jansi-core:3.30.4` - JLine's jansi implementation
+- `org.apache.maven.resolver:maven-resolver-transport-jdk:2.0.9` - Java 11+ HTTP client-based transport
+- Updated all resolver dependencies to version `2.0.9`
+- Updated `com.google.guava:failureaccess` to version `1.0.1`
+
+#### Removed Source Files
+- `org.eclipse.m2e.slf4j2.provider.MavenSLF4JProvider` - No longer needed as Maven 4 provides its own SLF4J provider
+- `META-INF/services/org.slf4j.spi.SLF4JServiceProvider` - Service registration for the removed provider
+
+#### BND Configuration Updates
+- Updated SLF4J binding jar name from `maven-slf4j-provider-${maven-core.version}.jar` to `maven-logging-${maven-core.version}.jar`
+
+### 2. Runtime Target Platform (target-platform/m2e-runtimes.target)
+
+- Updated to reference Maven runtime `3.9.1100.20241011-1318` from m2e release 2.2.1 for backward compatibility
+- This allows running tests with both Maven 3.9.11 and Maven 4.0.0-rc-4
+
+### 3. Root POM (pom.xml)
+
+- Updated maven.runtime dependency version from `3.9.1100-SNAPSHOT` to `4.0.004-SNAPSHOT`
+
+## Maven 4 Architecture Changes
+
+### New Modules in Maven 4
+Maven 4 introduces several new API modules:
+- `maven-api-core` - Core Maven 4 API
+- `maven-api-model` - Model API
+- `maven-api-plugin` - Plugin API
+- `maven-api-settings` - Settings API
+- `maven-api-toolchain` - Toolchain API
+- `maven-api-xml` - XML processing API
+- `maven-di` - Dependency injection module
+- `maven-impl` - Implementation module
+- `maven-jline` - JLine integration
+- `maven-logging` - Logging module (replaces maven-slf4j-provider)
+
+### Backward Compatibility
+
+Maven 4 provides the `maven-compat` module that maintains compatibility with Maven 3 APIs. This includes:
+- Support for Plexus Container API
+- Legacy Maven APIs from Maven 3.x
+- Compatibility layer for plugins built against Maven 3
+
+## Code Compatibility Assessment
+
+### PlexusContainer Usage
+
+The following areas of m2e use PlexusContainer and related Plexus APIs:
+
+1. **org.eclipse.m2e.core.internal.embedder.PlexusContainerManager**
+ - Creates and manages PlexusContainer instances
+ - Uses DefaultPlexusContainer, ContainerConfiguration
+ - **Status**: Should work with maven-compat module
+
+2. **org.eclipse.m2e.core.internal.embedder.IMavenPlexusContainer**
+ - Interface for wrapping PlexusContainer
+ - **Status**: Should work with maven-compat module
+
+3. **Plexus Utility Classes**
+ - `org.codehaus.plexus.util.xml.Xpp3Dom` - Used extensively for plugin configuration
+ - `org.codehaus.plexus.util.dag.*` - DAG utilities for dependency ordering
+ - `org.codehaus.plexus.util.Scanner` - Build context scanning
+ - `org.codehaus.plexus.classworlds.ClassRealm` - ClassLoader management
+ - **Status**: These are still available in Maven 4 (plexus-utils, plexus-classworlds)
+
+4. **org.eclipse.m2e.tests.common.AbstractMavenProjectTestCase**
+ - Test utilities that lookup PlexusContainer
+ - **Status**: Should work with maven-compat module
+
+5. **org.eclipse.m2e.core.ui.internal.archetype.ArchetypePlugin**
+ - Uses DefaultPlexusContainer for archetype operations
+ - **Status**: Should work with maven-compat module
+
+## Testing Requirements
+
+The following areas should be tested to ensure Maven 4 compatibility:
+
+### Core Functionality
+1. [ ] Project import from existing Maven projects
+2. [ ] POM editing and validation
+3. [ ] Dependency resolution
+4. [ ] Plugin execution during builds
+5. [ ] Workspace resolution
+6. [ ] Maven lifecycle execution
+7. [ ] External Maven launches
+
+### PlexusContainer Compatibility
+1. [ ] Container creation and disposal
+2. [ ] Component lookup
+3. [ ] Extension loading from .mvn/extensions.xml
+4. [ ] ClassRealm management
+5. [ ] Plugin realm creation
+
+### Build and Test Infrastructure
+1. [ ] Maven runtime bundle builds successfully
+2. [ ] All m2e modules compile against Maven 4 APIs
+3. [ ] Unit tests pass
+4. [ ] Integration tests pass
+5. [ ] UI tests pass
+
+### Maven 4 Specific Features
+1. [ ] New Maven 4 API usage (if any)
+2. [ ] Maven 4 resolver transport (JDK HTTP client)
+3. [ ] Maven 4 logging integration with Eclipse
+4. [ ] Maven 4 dependency injection (Guice/Sisu)
+
+## Known Issues and Limitations
+
+### Build Environment
+- The current build requires access to repo.eclipse.org which may not be available in all environments
+- Tycho 4.0.13 may have issues with JavaSE-21 execution environment
+
+### Potential API Changes
+The following Maven APIs may have changed between Maven 3 and Maven 4:
+1. **Resolver APIs** - Updated from 1.x to 2.x
+ - New transport mechanism (JDK HTTP client vs Apache HttpClient)
+ - May affect custom repository configurations
+
+2. **Logging** - New maven-logging module
+ - Uses SLF4J 2.x
+ - May affect log filtering and configuration
+
+3. **Plugin API** - New maven-api-plugin module
+ - May affect plugin descriptor reading
+ - May affect mojo parameter injection
+
+## Recommendations
+
+### Short Term
+1. Complete full build and test cycle to identify any runtime issues
+2. Test with real-world projects to validate Maven 4 compatibility
+3. Document any API incompatibilities found during testing
+4. Consider keeping Maven 3.9.11 runtime as an alternative for users
+
+### Long Term
+1. Consider migrating to Maven 4 APIs where beneficial
+2. Deprecate Maven 3-specific workarounds that are no longer needed
+3. Take advantage of Maven 4's improved dependency injection
+4. Explore Maven 4's new features (e.g., build cache, consumer POM)
+
+## References
+
+- Maven 4.0.0-rc-4 Release: https://repo.maven.apache.org/maven2/org/apache/maven/maven/4.0.0-rc-4/
+- Maven Resolver 2.0.9: https://maven.apache.org/resolver/
+- Maven 4 Migration Guide: https://maven.apache.org/docs/4.0.0/
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 77327b5c45..47f2e40813 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,5 +1,14 @@
# Eclipse m2e - Release notes
+## 3.0.0 (Planned)
+
+* 📅 Release Date: TBD
+
+### Embed and use Maven 4.0.0
+
+Updated the embedded Maven from version 3.9.11 to 4.0.0, the first Maven 4 release.
+Maven 4 includes the maven-compat module for backward compatibility with Maven 3 builds.
+
## 2.9.2
### Multi-Release-Jar support
diff --git a/org.eclipse.m2e.apt.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.apt.core/META-INF/MANIFEST.MF
index c4510119c0..11dfec2aa6 100644
--- a/org.eclipse.m2e.apt.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.apt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.eclipse.m2e.apt.core;singleton:=true
-Bundle-Version: 2.3.100.qualifier
+Bundle-Version: 2.3.200.qualifier
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.core.resources,
@@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.jdt.apt.core;bundle-version="3.7.50",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.jdt;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)"
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)"
Eclipse-LazyStart: true
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: %Bundle-Vendor
diff --git a/org.eclipse.m2e.binaryproject.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.binaryproject.ui/META-INF/MANIFEST.MF
index 14e8b2f797..76e665c162 100644
--- a/org.eclipse.m2e.binaryproject.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.binaryproject.ui/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.m2e.binaryproject.ui;singleton:=true
-Bundle-Version: 2.1.100.qualifier
+Bundle-Version: 2.1.200.qualifier
Bundle-Vendor: Eclipse.org - m2e
Bundle-Name: M2E Binary Project UI
Require-Bundle: org.eclipse.ui,
@@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.m2e.core.ui;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.binaryproject;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)"
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-ActivationPolicy: lazy
Automatic-Module-Name: org.eclipse.m2e.binaryproject.ui
diff --git a/org.eclipse.m2e.binaryproject/META-INF/MANIFEST.MF b/org.eclipse.m2e.binaryproject/META-INF/MANIFEST.MF
index f57e0f6558..b7cdfe0912 100644
--- a/org.eclipse.m2e.binaryproject/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.binaryproject/META-INF/MANIFEST.MF
@@ -1,11 +1,11 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.m2e.binaryproject;singleton:=true
-Bundle-Version: 2.2.100.qualifier
+Bundle-Version: 2.2.200.qualifier
Bundle-Vendor: Eclipse.org - m2e
Bundle-Name: M2E Binary Project Core
Require-Bundle: org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.sourcelookup;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.jdt;bundle-version="[2.0.0,3.0.0)",
org.eclipse.jdt.core;bundle-version="3.7.0",
diff --git a/org.eclipse.m2e.core.tests/META-INF/MANIFEST.MF b/org.eclipse.m2e.core.tests/META-INF/MANIFEST.MF
index b571372e94..b3bdecc0d8 100644
--- a/org.eclipse.m2e.core.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.core.tests/META-INF/MANIFEST.MF
@@ -6,7 +6,8 @@ Bundle-SymbolicName: org.eclipse.m2e.core.tests
Bundle-Version: 2.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: Eclipse.org - m2e
-Require-Bundle: org.eclipse.m2e.tests.common,
+Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.m2e.tests.common,
org.eclipse.core.runtime,
org.eclipse.m2e.launching,
org.eclipse.jdt.launching,
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/README.md b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/README.md
new file mode 100644
index 0000000000..5c8b4a7acc
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/README.md
@@ -0,0 +1,72 @@
+# Hello Maven 4 Test Project
+
+## Overview
+This is a demonstration project showcasing Maven 4 features for testing m2e compatibility.
+
+## Project Structure
+```
+HelloMaven4/
+├── pom.xml (parent)
+├── hello-core/ (library subproject)
+│ └── src/main/java/org/eclipse/m2e/tests/demo/core/
+│ └── GreetingService.java
+└── hello-app/ (application subproject)
+ └── src/main/java/org/eclipse/m2e/tests/demo/app/
+ └── HelloWorldApp.java
+```
+
+## Maven 4 Features Used
+
+This project demonstrates the following Maven 4 features from [What's New in Maven 4](https://maven.apache.org/whatsnewinmaven4.html):
+
+### 1. ✅ New Model Version 4.1.0
+- **Feature**: Maven 4 introduces a new POM model version `4.1.0`
+- **Usage**: All POMs use `4.1.0` and `xmlns="http://maven.apache.org/POM/4.1.0"` namespace
+- **Location**: All `pom.xml` files
+- **Status**: Demonstrated
+
+### 2. ✅ Subprojects Instead of Modules
+- **Feature**: Maven 4 uses `` instead of `` for better semantics
+- **Usage**: Parent POM uses `` to declare child projects
+- **Location**: `pom.xml` (parent)
+- **Status**: Demonstrated
+
+### 3. ✅ Inheritance of GroupId and Version
+- **Feature**: Child projects can omit `` and `` when inheriting from parent
+- **Usage**: Child POMs (`hello-core` and `hello-app`) omit these elements
+- **Location**: `hello-core/pom.xml` and `hello-app/pom.xml`
+- **Status**: Demonstrated
+
+### 4. ⏳ Build/Consumer POM Split
+- **Feature**: Maven 4 separates build-time and consumption-time concerns
+- **Usage**: Not explicitly demonstrated in this simple project
+- **Status**: Not applicable for this simple test case
+
+### 5. ⏳ Better Java Version Handling
+- **Feature**: Improved handling of Java versions with `maven.compiler.release`
+- **Usage**: Uses `maven.compiler.release` property set to 11
+- **Location**: Parent POM properties
+- **Status**: Partially demonstrated
+
+## Testing with Maven 4
+
+This project is designed to be built with **Maven 4.0.0-rc-2** or later (Preview release).
+
+To verify Maven 4 compatibility:
+```bash
+# Requires Maven 4.0.0-rc-2 or later
+mvn clean install
+```
+
+## Purpose
+
+This test project serves two main goals:
+
+1. **Demonstrate Incompatibility**: Show that current m2e does NOT support Maven 4 features
+2. **Validation Target**: Provide a test case to verify Maven 4 support as it's implemented
+
+## References
+
+- [Apache Maven 4 Downloads](https://maven.apache.org/download.cgi)
+- [What's New in Maven 4](https://maven.apache.org/whatsnewinmaven4.html)
+- [Maven 4 Announcement](https://lists.apache.org/thread/jnb3snhdm4b564gz8hbctp9rfk8fc67n)
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/pom.xml b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/pom.xml
new file mode 100644
index 0000000000..d959aceaf7
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/pom.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ 4.1.0
+
+
+ org.eclipse.m2e.tests.demo
+ hello-maven4-parent
+ 1.0.0-SNAPSHOT
+
+
+ hello-app
+
+ Hello Maven 4 App
+ Application module demonstrating Maven 4 features
+
+
+
+ org.eclipse.m2e.tests.demo
+ hello-core
+ 1.0.0-SNAPSHOT
+
+
+
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/src/main/java/org/eclipse/m2e/tests/demo/app/HelloWorldApp.java b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/src/main/java/org/eclipse/m2e/tests/demo/app/HelloWorldApp.java
new file mode 100644
index 0000000000..ffb0ffee32
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-app/src/main/java/org/eclipse/m2e/tests/demo/app/HelloWorldApp.java
@@ -0,0 +1,19 @@
+package org.eclipse.m2e.tests.demo.app;
+
+import org.eclipse.m2e.tests.demo.core.GreetingService;
+
+/**
+ * Simple HelloWorld application demonstrating Maven 4 multi-subproject structure.
+ */
+public class HelloWorldApp {
+
+ public static void main(String[] args) {
+ GreetingService service = new GreetingService();
+
+ String name = args.length > 0 ? args[0] : "Maven 4 World";
+ String greeting = service.greet(name);
+
+ System.out.println(greeting);
+ System.out.println("Built with Maven 4!");
+ }
+}
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/pom.xml b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/pom.xml
new file mode 100644
index 0000000000..ab4e017df8
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ 4.1.0
+
+
+ org.eclipse.m2e.tests.demo
+ hello-maven4-parent
+ 1.0.0-SNAPSHOT
+
+
+ hello-core
+
+ Hello Maven 4 Core
+ Core library module demonstrating Maven 4 features
+
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/src/main/java/org/eclipse/m2e/tests/demo/core/GreetingService.java b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/src/main/java/org/eclipse/m2e/tests/demo/core/GreetingService.java
new file mode 100644
index 0000000000..4458173d37
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/hello-core/src/main/java/org/eclipse/m2e/tests/demo/core/GreetingService.java
@@ -0,0 +1,25 @@
+package org.eclipse.m2e.tests.demo.core;
+
+/**
+ * A simple greeting service to demonstrate Maven 4 project structure.
+ */
+public class GreetingService {
+
+ private final String prefix;
+
+ public GreetingService(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public GreetingService() {
+ this("Hello");
+ }
+
+ public String greet(String name) {
+ return prefix + ", " + name + "!";
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+}
diff --git a/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/pom.xml b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/pom.xml
new file mode 100644
index 0000000000..ab070dcac9
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/resources/projects/HelloMaven4/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+
+ 4.1.0
+
+ org.eclipse.m2e.tests.demo
+ hello-maven4-parent
+ 1.0.0-SNAPSHOT
+ pom
+
+ Hello Maven 4 Parent
+ A simple Maven 4 demo project for testing m2e support
+
+
+ UTF-8
+ 11
+
+
+
+ hello-core
+ hello-app
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.3.0
+
+
+
+
+
diff --git a/org.eclipse.m2e.core.tests/src/org/eclipse/m2e/core/Maven4Test.java b/org.eclipse.m2e.core.tests/src/org/eclipse/m2e/core/Maven4Test.java
new file mode 100644
index 0000000000..54779ee172
--- /dev/null
+++ b/org.eclipse.m2e.core.tests/src/org/eclipse/m2e/core/Maven4Test.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Red Hat Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.m2e.tests.common.AbstractMavenProjectTestCase;
+import org.junit.After;
+import org.junit.Test;
+
+/**
+ * Test case for Maven 4 support in m2e.
+ *
+ * This test demonstrates that m2e currently does NOT support Maven 4 features.
+ * As Maven 4 support is implemented, this test can be enhanced to verify:
+ * - Model version 4.1.0 parsing
+ * - Subprojects support (instead of modules)
+ * - Inheritance of groupId and version
+ * - Build/Consumer POM split
+ *
+ * Based on real-world usage from https://github.com/jline/jline3
+ *
+ * @see https://maven.apache.org/whatsnewinmaven4.html
+ */
+public class Maven4Test extends AbstractMavenProjectTestCase {
+
+ @After
+ public void clearWorkspace() throws Exception {
+ for(IProject p : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+ p.delete(true, null);
+ }
+ }
+
+ /**
+ * Test Maven 4 project with model version 4.1.0 and subprojects.
+ *
+ * This test attempts to import a Maven 4 project that uses:
+ * - Model version 4.1.0
+ * - Subprojects instead of modules
+ * - Inheritance of groupId and version from parent
+ *
+ * Expected behavior:
+ * - With current m2e (Maven 3 only): This test is expected to fail or show errors
+ * - With Maven 4 support: This test should pass and projects should be imported correctly
+ */
+ @Test
+ public void testMaven4BasicProject() throws Exception {
+ // Get the Maven 4 test project
+ File sourceDirectory = new File(
+ FileLocator.toFileURL(getClass().getResource("/resources/projects/HelloMaven4")).toURI());
+
+ assertNotNull("HelloMaven4 project directory should exist", sourceDirectory);
+ assertTrue("HelloMaven4 project directory should be a directory", sourceDirectory.isDirectory());
+
+ File parentPom = new File(sourceDirectory, "pom.xml");
+ assertTrue("Parent pom.xml should exist", parentPom.exists());
+
+ // Attempt to import the Maven 4 project
+ // Note: This will likely fail with current m2e since it doesn't support Maven 4
+ try {
+ IProject project = importProject("resources/projects/HelloMaven4/pom.xml");
+
+ // If we get here, the project was imported (unexpected with current m2e)
+ assertNotNull("Parent project should be imported", project);
+
+ // Check if subprojects are recognized
+ // Note: With Maven 4 support, these should be imported as child projects
+ IProject helloCore = ResourcesPlugin.getWorkspace().getRoot().getProject("hello-core");
+ IProject helloApp = ResourcesPlugin.getWorkspace().getRoot().getProject("hello-app");
+
+ // These assertions will help verify Maven 4 support when implemented
+ // For now, they document what should work with Maven 4
+ assertNotNull("hello-core subproject should be recognized", helloCore);
+ assertNotNull("hello-app subproject should be recognized", helloApp);
+
+ } catch (Exception e) {
+ // Expected with current m2e - Maven 4 is not yet supported
+ // This documents that m2e needs Maven 4 support
+ System.err.println("Expected failure with Maven 3 based m2e: " + e.getMessage());
+
+ // For now, we'll let this exception indicate Maven 4 is not supported
+ // When Maven 4 support is added, this test should pass without exceptions
+ fail("Maven 4 project import failed (expected with current m2e): " + e.getMessage());
+ }
+ }
+
+ /**
+ * Test that Maven 4 model version 4.1.0 is recognized.
+ *
+ * This is a more basic test that just checks if the model version is parsed correctly.
+ * When Maven 4 support is added, this should pass.
+ */
+ @Test
+ public void testMaven4ModelVersion() throws Exception {
+ File sourceDirectory = new File(
+ FileLocator.toFileURL(getClass().getResource("/resources/projects/HelloMaven4")).toURI());
+ File parentPom = new File(sourceDirectory, "pom.xml");
+
+ assertTrue("Parent pom.xml should exist", parentPom.exists());
+
+ // Try to read the POM
+ // With Maven 4 support, this should recognize the 4.1.0 model version
+ try {
+ // This will likely fail with current Maven 3 based implementation
+ // as it doesn't recognize model version 4.1.0
+ @SuppressWarnings("unused")
+ IProject project = importProject("resources/projects/HelloMaven4/pom.xml");
+
+ // If we get here, Maven 4 model version was recognized
+ // This indicates Maven 4 support is working
+
+ } catch (Exception e) {
+ // Expected with current m2e
+ System.err.println("Maven 4 model version not supported yet: " + e.getMessage());
+ fail("Maven 4 model version 4.1.0 is not supported (expected with current m2e): " + e.getMessage());
+ }
+ }
+}
diff --git a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
index ad6a86c155..f84cd73148 100644
--- a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.m2e.core.ui;singleton:=true
-Bundle-Version: 2.4.1.qualifier
+Bundle-Version: 2.4.200.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
@@ -32,7 +32,7 @@ Require-Bundle: org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.resources;bundle-version="3.5.2",
org.eclipse.core.runtime;bundle-version="3.5.0",
org.eclipse.m2e.model.edit;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.ui.console;bundle-version="3.4.0",
org.eclipse.ui.ide;bundle-version="3.18.0",
org.eclipse.core.filesystem;bundle-version="1.2.1",
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenSettingsPreferencePage.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenSettingsPreferencePage.java
index a31a766017..efd0999039 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenSettingsPreferencePage.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenSettingsPreferencePage.java
@@ -59,7 +59,6 @@
import org.eclipse.ui.ide.IDE;
import org.apache.maven.building.Problem;
-import org.apache.maven.cli.MavenCli;
import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor;
import org.apache.maven.repository.RepositorySystem;
import org.apache.maven.settings.Settings;
@@ -69,6 +68,7 @@
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.embedder.IMavenConfiguration;
import org.eclipse.m2e.core.internal.IMavenToolbox;
+import org.eclipse.m2e.core.internal.embedder.MavenCLICompat;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.MavenUpdateRequest;
import org.eclipse.m2e.core.ui.internal.Messages;
@@ -210,9 +210,9 @@ protected Control createContents(Composite parent) {
userToolchainsLink = createLink(composite, Messages.MavenSettingsPreferencePage_userToolchainslink2,
Messages.MavenSettingsPreferencePage_userToolchainslink_tooltip, this::getUserToolchains,
- MavenCli.DEFAULT_USER_TOOLCHAINS_FILE);
+ MavenCLICompat.DEFAULT_USER_TOOLCHAINS_FILE);
userToolchainsText = createFileSelectionWidgets(composite, mavenConfiguration.getUserToolchainsFile(),
- MavenCli.DEFAULT_USER_TOOLCHAINS_FILE);
+ MavenCLICompat.DEFAULT_USER_TOOLCHAINS_FILE);
Button updateSettings = new Button(composite, SWT.NONE);
updateSettings.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
@@ -310,7 +310,7 @@ protected void checkSettings() {
Messages.MavenSettingsPreferencePage_userSettingslink2, Messages.MavenSettingsPreferencePage_userSettingslink1);
String userToolchains = getUserToolchains();
- updateLink(userToolchainsLink, userToolchains, MavenCli.DEFAULT_USER_TOOLCHAINS_FILE,
+ updateLink(userToolchainsLink, userToolchains, MavenCLICompat.DEFAULT_USER_TOOLCHAINS_FILE,
Messages.MavenSettingsPreferencePage_userToolchainslink2,
Messages.MavenSettingsPreferencePage_userToolchainslink1);
diff --git a/org.eclipse.m2e.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.core/META-INF/MANIFEST.MF
index 2fa9aafa97..aba6e9568a 100644
--- a/org.eclipse.m2e.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.core/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@ Bundle-Version: 2.7.600.qualifier
Bundle-Activator: org.eclipse.m2e.core.internal.MavenPluginActivator
Bundle-Vendor: %Bundle-Vendor
Bundle-Localization: plugin
-Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.workspace.cli;bundle-version="0.1.0",
org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.core.resources;bundle-version="3.9.0",
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
index 1ab04cb389..cdd29f93a1 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
@@ -32,8 +32,6 @@
import org.codehaus.plexus.PlexusContainer;
-import org.apache.maven.project.DefaultProjectBuilder;
-
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.embedder.IMavenConfiguration;
import org.eclipse.m2e.core.embedder.MavenModelManager;
@@ -101,7 +99,8 @@ public void start(final BundleContext context) throws Exception {
}
// Workaround MNG-6530
- System.setProperty(DefaultProjectBuilder.DISABLE_GLOBAL_MODEL_CACHE_SYSTEM_PROPERTY, Boolean.toString(true));
+ //TODO is this still working for maven4?
+ System.setProperty("maven.defaultProjectBuilder.disableGlobalModelCache", Boolean.toString(true));
URLConnectionCaches.disable();
// For static access, this also enables any of the services and keep them running forever...
this.bundleContext = context;
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenCLICompat.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenCLICompat.java
new file mode 100644
index 0000000000..e7582c17c1
--- /dev/null
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenCLICompat.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.eclipse.m2e.core.internal.embedder;
+
+import java.io.File;
+
+
+/**
+ * Some constants copied here for backward compatibility
+ */
+public class MavenCLICompat {
+ public static final String LOCAL_REPO_PROPERTY = "maven.repo.local";
+
+ public static final String MULTIMODULE_PROJECT_DIRECTORY = "maven.multiModuleProjectDirectory";
+
+ public static final String USER_HOME = System.getProperty("user.home");
+
+ public static final File USER_MAVEN_CONFIGURATION_HOME = new File(USER_HOME, ".m2");
+
+ public static final File DEFAULT_USER_TOOLCHAINS_FILE = new File(USER_MAVEN_CONFIGURATION_HOME, "toolchains.xml");
+
+ public static final File DEFAULT_GLOBAL_TOOLCHAINS_FILE = new File(System.getProperty("maven.conf"),
+ "toolchains.xml");
+}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExecutionContext.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExecutionContext.java
index b11e1a4faf..fb69eb9fbc 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExecutionContext.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExecutionContext.java
@@ -46,7 +46,6 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.InvalidRepositoryException;
import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.cli.MavenCli;
import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor;
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
@@ -210,7 +209,7 @@ static MavenExecutionRequest createExecutionRequest(IMavenConfiguration mavenCon
Settings settings = MavenPlugin.getMaven().getSettings(settingsLocations);
updateSettingsFiles(request, settingsLocations);
//and settings are actually derived from IMavenConfiguration
- File userToolchainsFile = MavenCli.DEFAULT_USER_TOOLCHAINS_FILE;
+ File userToolchainsFile = MavenCLICompat.DEFAULT_USER_TOOLCHAINS_FILE;
if(mavenConfiguration.getUserToolchainsFile() != null) {
userToolchainsFile = new File(mavenConfiguration.getUserToolchainsFile());
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
index 1f00618d93..e12f8c606b 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java
@@ -66,7 +66,6 @@
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
-import org.codehaus.plexus.util.dag.CycleDetectedException;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.apache.maven.RepositoryUtils;
@@ -110,7 +109,6 @@
import org.apache.maven.plugin.version.PluginVersionRequest;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.plugin.version.PluginVersionResolver;
-import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
@@ -962,7 +960,7 @@ public List getSortedProjects(List projects) throws
try {
ProjectSorter rm = new ProjectSorter(projects);
return rm.getSortedProjects();
- } catch(CycleDetectedException | DuplicateProjectException ex) {
+ } catch(Exception ex) {
throw new CoreException(Status.error(Messages.MavenImpl_error_sort, ex));
}
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenProperties.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenProperties.java
index 8512b67021..f35783692a 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenProperties.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenProperties.java
@@ -48,6 +48,8 @@
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
+import org.codehaus.plexus.util.StringUtils;
+
import org.apache.maven.cli.CLIManager;
import org.apache.maven.cli.MavenCli;
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/EclipsePluginDependenciesResolver.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/EclipsePluginDependenciesResolver.java
index b911959fd8..78ba6b38e1 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/EclipsePluginDependenciesResolver.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/EclipsePluginDependenciesResolver.java
@@ -15,6 +15,7 @@
import java.util.List;
+import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.aether.RepositorySystemSession;
@@ -22,14 +23,27 @@
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.DependencyResult;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.PluginResolutionException;
import org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver;
+import org.apache.maven.plugin.internal.PluginDependenciesResolver;
@Singleton
-public class EclipsePluginDependenciesResolver extends DefaultPluginDependenciesResolver {
+public class EclipsePluginDependenciesResolver implements PluginDependenciesResolver {
+
+ private DefaultPluginDependenciesResolver delegate;
+
+ /**
+ * FIXME move to compat layer, we only need EclipseWorkspaceArtifactRepository.setDisabled() be accessible from
+ * there..
+ */
+ @Inject
+ public EclipsePluginDependenciesResolver(DefaultPluginDependenciesResolver delegate) {
+ this.delegate = delegate;
+ }
/*
* Plugin realms are cached and there is currently no way to purge cached
@@ -44,7 +58,7 @@ public class EclipsePluginDependenciesResolver extends DefaultPluginDependencies
public Artifact resolve(Plugin plugin, List repositories, RepositorySystemSession session)
throws PluginResolutionException {
try (var d = EclipseWorkspaceArtifactRepository.setDisabled()) {
- return super.resolve(plugin, repositories, session);
+ return delegate.resolve(plugin, repositories, session);
}
}
@@ -52,8 +66,15 @@ public Artifact resolve(Plugin plugin, List repositories, Repo
public DependencyNode resolve(Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
List repositories, RepositorySystemSession session) throws PluginResolutionException {
try (var d = EclipseWorkspaceArtifactRepository.setDisabled()) {
- return super.resolve(plugin, pluginArtifact, dependencyFilter, repositories, session);
+ return delegate.resolve(plugin, pluginArtifact, dependencyFilter, repositories, session);
}
}
+ @Override
+ public DependencyResult resolvePlugin(Plugin plugin, Artifact artifact, DependencyFilter dependencyFilter,
+ List remotePluginRepositories, RepositorySystemSession repositorySession)
+ throws PluginResolutionException {
+ return delegate.resolvePlugin(plugin, artifact, dependencyFilter, remotePluginRepositories, repositorySession);
+ }
+
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenProjectFacade.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenProjectFacade.java
index 34ba4bf7cc..ea906bbf92 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenProjectFacade.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenProjectFacade.java
@@ -47,7 +47,6 @@
import org.apache.maven.project.MavenProject;
import org.eclipse.m2e.core.embedder.ArtifactKey;
-import org.eclipse.m2e.internal.maven.compat.LifecycleExecutionPlanCalculatorFacade;
import org.eclipse.m2e.core.embedder.ArtifactRef;
import org.eclipse.m2e.core.embedder.ArtifactRepositoryRef;
import org.eclipse.m2e.core.embedder.IComponentLookup;
@@ -65,6 +64,7 @@
import org.eclipse.m2e.core.project.MavenProjectUtils;
import org.eclipse.m2e.core.project.ResolverConfiguration;
import org.eclipse.m2e.core.project.configurator.MojoExecutionKey;
+import org.eclipse.m2e.internal.maven.compat.LifecycleExecutionPlanCalculatorFacade;
public class MavenProjectFacade implements IMavenProjectFacade, Serializable {
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
index ebf24bd506..d219209064 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
@@ -69,8 +69,6 @@
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.osgi.util.NLS;
-import org.codehaus.plexus.util.dag.CycleDetectedException;
-
import org.apache.maven.AbstractMavenLifecycleParticipant;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.MavenArtifactRepository;
@@ -82,7 +80,6 @@
import org.apache.maven.model.Parent;
import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.model.building.ModelProblem.Severity;
-import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
@@ -848,7 +845,7 @@ private Collection getSortedProjects(Collection proj
//sort project according to their declared dependencies...
ProjectSorter sorter = new ProjectSorter(projects);
return sorter.getSortedProjects();
- } catch(CycleDetectedException | DuplicateProjectException ex) {
+ } catch(Exception ex) {
return projects;
}
}
diff --git a/org.eclipse.m2e.discovery/META-INF/MANIFEST.MF b/org.eclipse.m2e.discovery/META-INF/MANIFEST.MF
index e284a1cdbb..8eb2f6d72b 100644
--- a/org.eclipse.m2e.discovery/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.discovery/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.eclipse.m2e.discovery;singleton:=true
-Bundle-Version: 2.1.100.qualifier
+Bundle-Version: 2.1.200.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: %Bundle-Vendor
Bundle-Localization: plugin
@@ -13,7 +13,7 @@ Require-Bundle: org.eclipse.equinox.p2.ui.discovery,
org.eclipse.core.runtime,
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.core.ui;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.core.resources,
org.eclipse.ui.ide,
org.eclipse.equinox.p2.operations,
diff --git a/org.eclipse.m2e.editor.lemminx.tests/META-INF/MANIFEST.MF b/org.eclipse.m2e.editor.lemminx.tests/META-INF/MANIFEST.MF
index 4e9ab741b3..6bca80ee32 100644
--- a/org.eclipse.m2e.editor.lemminx.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.editor.lemminx.tests/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@ Require-Bundle: org.junit,
org.eclipse.ui.ide,
org.eclipse.core.resources,
org.eclipse.ui.workbench.texteditor,
- org.eclipse.m2e.maven.runtime;bundle-version="[3.9.400,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[4,5)",
org.eclipse.ui.tests.harness,
org.eclipse.jface.text,
org.eclipse.m2e.core.ui,
diff --git a/org.eclipse.m2e.editor.lemminx/META-INF/MANIFEST.MF b/org.eclipse.m2e.editor.lemminx/META-INF/MANIFEST.MF
index a51bd0d9c2..dc2cef0ca4 100644
--- a/org.eclipse.m2e.editor.lemminx/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.editor.lemminx/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: M2E Maven POM File Editor using Wild Web Developer, LemMinX and Maven LS extension (requires Incubating components)
Bundle-SymbolicName: org.eclipse.m2e.editor.lemminx;singleton:=true
-Bundle-Version: 2.0.901.qualifier
+Bundle-Version: 2.0.1001.qualifier
Automatic-Module-Name: org.eclipse.m2e.xmlls.extension
Import-Package: javax.inject;version="[1.0.0,2.0.0)",
org.apache.commons.cli;version="1.6.0",
@@ -13,7 +13,7 @@ Require-Bundle: org.eclipse.wildwebdeveloper.xml;bundle-version="[1.3,1.4)",
org.eclipse.lsp4e;bundle-version="0.18.0",
org.eclipse.lsp4j;bundle-version="0.21.0",
org.eclipse.m2e.core,
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.core.resources
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: Eclipse.org - m2e
diff --git a/org.eclipse.m2e.editor.lemminx/pom.xml b/org.eclipse.m2e.editor.lemminx/pom.xml
index 865c80e5e7..23b8b663d3 100644
--- a/org.eclipse.m2e.editor.lemminx/pom.xml
+++ b/org.eclipse.m2e.editor.lemminx/pom.xml
@@ -24,7 +24,7 @@
org.eclipse.m2e.editor.lemminx
M2E Maven POM File Editor (Wild Web Developer, LemMinX, LS)
eclipse-plugin
- 2.0.901-SNAPSHOT
+ 2.0.1001-SNAPSHOT
diff --git a/org.eclipse.m2e.editor/META-INF/MANIFEST.MF b/org.eclipse.m2e.editor/META-INF/MANIFEST.MF
index 01c444a614..5d13459021 100644
--- a/org.eclipse.m2e.editor/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.editor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.eclipse.m2e.editor;singleton:=true
-Bundle-Version: 2.1.200.qualifier
+Bundle-Version: 2.1.300.qualifier
Bundle-Activator: org.eclipse.m2e.editor.MavenEditorPlugin
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.core.resources,
@@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.jface.text,
org.eclipse.ui.workbench,
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.core.ui;bundle-version="[2.0.0,3.0.0)",
org.eclipse.jface,
org.eclipse.jface.text,
diff --git a/org.eclipse.m2e.feature/feature.xml b/org.eclipse.m2e.feature/feature.xml
index e153e1f1f9..e485031acd 100644
--- a/org.eclipse.m2e.feature/feature.xml
+++ b/org.eclipse.m2e.feature/feature.xml
@@ -2,7 +2,7 @@
toolchainFiles = List.of(MavenCli.DEFAULT_GLOBAL_TOOLCHAINS_FILE, MavenCli.DEFAULT_USER_TOOLCHAINS_FILE);
- ToolchainsReader reader = new DefaultToolchainsReader();
- for (File toolchainsFile : toolchainFiles) {
- if (toolchainsFile.isFile() && toolchainsFile.canRead()) {
- try {
- PersistedToolchains toolchains = reader.read(toolchainsFile, null);
- for (ToolchainModel toolchain : toolchains.getToolchains()) {
- if (monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- }
- addToolchain(toolchain);
- }
- } catch(Exception e) {
- return Status.error(e.getMessage(), e);
- }
- }
- }
- return Status.OK_STATUS;
- }
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ List toolchainFiles = List.of(MavenCLICompat.DEFAULT_GLOBAL_TOOLCHAINS_FILE,
+ MavenCLICompat.DEFAULT_USER_TOOLCHAINS_FILE);
+ ToolchainsReader reader = new DefaultToolchainsReader();
+ for(File toolchainsFile : toolchainFiles) {
+ if(toolchainsFile.isFile() && toolchainsFile.canRead()) {
+ try {
+ PersistedToolchains toolchains = reader.read(toolchainsFile, null);
+ for(ToolchainModel toolchain : toolchains.getToolchains()) {
+ if(monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+ addToolchain(toolchain);
+ }
+ } catch(Exception e) {
+ return Status.error(e.getMessage(), e);
+ }
+ }
+ }
+ return Status.OK_STATUS;
+ }
- private Optional getVMInstallation(ToolchainModel toolchain) {
- return Optional.ofNullable(toolchain)
- .filter(t -> "jdk".equals(t.getType()))
- .map(ToolchainModel::getConfiguration)
- .filter(Xpp3Dom.class::isInstance)
- .map(Xpp3Dom.class::cast)
- .map(dom -> dom.getChild(JavaToolchainImpl.KEY_JAVAHOME))
- .map(Xpp3Dom::getValue)
- .map(File::new)
- .filter(File::isDirectory);
- }
+ private Optional getVMInstallation(ToolchainModel toolchain) {
+ return Optional.ofNullable(toolchain).filter(t -> "jdk".equals(t.getType())).map(ToolchainModel::getConfiguration)
+ .filter(Xpp3Dom.class::isInstance).map(Xpp3Dom.class::cast)
+ .map(dom -> dom.getChild(JavaToolchainImpl.KEY_JAVAHOME)).map(Xpp3Dom::getValue).map(File::new)
+ .filter(File::isDirectory);
+ }
- private void addToolchain(ToolchainModel toolchain) {
- getVMInstallation(toolchain)
- .filter(f -> standardType.validateInstallLocation(f).isOK())
- .ifPresent(candidate -> {
- if (Arrays.stream(standardType.getVMInstalls()) //
- .map(IVMInstall::getInstallLocation) //
- .filter(Objects::nonNull)
- .noneMatch(install -> isSameCanonicalFile(candidate, install))) {
- VMStandin workingCopy = new VMStandin(standardType, candidate.getAbsolutePath());
- workingCopy.setInstallLocation(candidate);
- String name = candidate.getName();
- int i = 1;
- while (isDuplicateName(name)) {
- name = candidate.getName() + '(' + i++ + ')';
- }
- workingCopy.setName(name);
- IVMInstall newVM = workingCopy.convertToRealVM();
- // next lines workaround https://github.com/eclipse-jdt/eclipse.jdt.debug/issues/248
- if (!(newVM instanceof IVMInstall2 newVM2 && newVM2.getJavaVersion() != null)) {
- standardType.disposeVMInstall(newVM.getId());
- }
- }
- });
- }
+ private void addToolchain(ToolchainModel toolchain) {
+ getVMInstallation(toolchain).filter(f -> standardType.validateInstallLocation(f).isOK()).ifPresent(candidate -> {
+ if(Arrays.stream(standardType.getVMInstalls()) //
+ .map(IVMInstall::getInstallLocation) //
+ .filter(Objects::nonNull).noneMatch(install -> isSameCanonicalFile(candidate, install))) {
+ VMStandin workingCopy = new VMStandin(standardType, candidate.getAbsolutePath());
+ workingCopy.setInstallLocation(candidate);
+ String name = candidate.getName();
+ int i = 1;
+ while(isDuplicateName(name)) {
+ name = candidate.getName() + '(' + i++ + ')';
+ }
+ workingCopy.setName(name);
+ IVMInstall newVM = workingCopy.convertToRealVM();
+ // next lines workaround https://github.com/eclipse-jdt/eclipse.jdt.debug/issues/248
+ if(!(newVM instanceof IVMInstall2 newVM2 && newVM2.getJavaVersion() != null)) {
+ standardType.disposeVMInstall(newVM.getId());
+ }
+ }
+ });
+ }
- private static boolean isDuplicateName(String name) {
- return Stream.of(JavaRuntime.getVMInstallTypes()) //
- .flatMap(vmType -> Arrays.stream(vmType.getVMInstalls())) //
- .map(IVMInstall::getName) //
- .anyMatch(name::equals);
- }
+ private static boolean isDuplicateName(String name) {
+ return Stream.of(JavaRuntime.getVMInstallTypes()) //
+ .flatMap(vmType -> Arrays.stream(vmType.getVMInstalls())) //
+ .map(IVMInstall::getName) //
+ .anyMatch(name::equals);
+ }
- private static boolean isSameCanonicalFile(File f1, File f2) {
- try {
- return Objects.equals(f1.getCanonicalFile(), f2.getCanonicalFile());
- } catch (IOException ex) {
- return false;
- }
- }
+ private static boolean isSameCanonicalFile(File f1, File f2) {
+ try {
+ return Objects.equals(f1.getCanonicalFile(), f2.getCanonicalFile());
+ } catch(IOException ex) {
+ return false;
+ }
+ }
}
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/JavaProjectConversionParticipant.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/JavaProjectConversionParticipant.java
index 61a6327ec3..071722e79a 100644
--- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/JavaProjectConversionParticipant.java
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/JavaProjectConversionParticipant.java
@@ -116,8 +116,8 @@ public void convert(IProject project, Model model, IProgressMonitor monitor) thr
Map options = javaProject.getOptions(true);
String source = options.get(JavaCore.COMPILER_SOURCE);
String target = options.get(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM);
- boolean emptySource = source == null || source.isEmpty();
- boolean emptyTarget = target == null || target.isEmpty();
+ boolean emptySource = source == null || source.isBlank();
+ boolean emptyTarget = target == null || target.isBlank();
if(emptySource && emptyTarget) {
return;
diff --git a/org.eclipse.m2e.launching/META-INF/MANIFEST.MF b/org.eclipse.m2e.launching/META-INF/MANIFEST.MF
index bae5037b24..df1829f5fd 100644
--- a/org.eclipse.m2e.launching/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.launching/META-INF/MANIFEST.MF
@@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.jdt.core,
org.eclipse.jdt.launching,
org.eclipse.jdt.debug.ui,
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.core.ui;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.workspace.cli;bundle-version="0.1.0"
diff --git a/org.eclipse.m2e.lemminx.feature/feature.xml b/org.eclipse.m2e.lemminx.feature/feature.xml
index 201963fecd..7bc9cae08e 100644
--- a/org.eclipse.m2e.lemminx.feature/feature.xml
+++ b/org.eclipse.m2e.lemminx.feature/feature.xml
@@ -2,7 +2,7 @@
diff --git a/org.eclipse.m2e.maven.runtime/pom.xml b/org.eclipse.m2e.maven.runtime/pom.xml
index 53fa0eff5a..8927070a8f 100644
--- a/org.eclipse.m2e.maven.runtime/pom.xml
+++ b/org.eclipse.m2e.maven.runtime/pom.xml
@@ -21,14 +21,16 @@
org.eclipse.m2e.maven.runtime
- 3.9.1101-SNAPSHOT
+ 4.0.0-SNAPSHOT
jar
M2E Embedded Maven Runtime (includes Incubating components)
- 3.9.11
+ 4.0.0-rc-4
+
+ 2.0.9
1.2.0
target/jars
@@ -65,6 +67,18 @@
org.apache.maven
maven-compat
+
+ org.eclipse.sisu
+ org.eclipse.sisu.inject
+ 0.9.0.M4
+
+
+ com.google.inject
+ guice
+ 5.1.0
+ classes
+ compile
+
org.eclipse.sisu
org.eclipse.sisu.plexus
@@ -77,22 +91,27 @@
org.apache.maven.resolver
maven-resolver-impl
+ ${resolver.version}
org.apache.maven.resolver
maven-resolver-connector-basic
+ ${resolver.version}
org.apache.maven.resolver
maven-resolver-transport-wagon
+ ${resolver.version}
org.apache.maven.resolver
maven-resolver-transport-file
+ ${resolver.version}
org.apache.maven.resolver
- maven-resolver-transport-http
+ maven-resolver-transport-jdk
+ ${resolver.version}
commons-codec
@@ -109,14 +128,14 @@
wagon-file
- org.fusesource.jansi
- jansi
+ org.jline
+ jansi-core
org.apache.maven
- maven-slf4j-provider
+ maven-logging
@@ -135,6 +154,7 @@
com.google.guava
failureaccess
+ 1.0.1
provided
@@ -181,7 +201,7 @@
# However when the this Maven runtime is used within the Eclipse-IDE(-JVM) we don't want it to use the embedded SLF4J-binding
# but instead use the SLF4J-binding provided by the Eclipse runtime. This is achived by making the embedded SLF4J-binding invisible
# for OSGi, by simply NOT placing the binding's jar on the Bundle-ClassPath.
- slf4jBinding=maven-slf4j-provider-${maven-core.version}.jar
+ slf4jBinding=maven-logging-${maven-core.version}.jar
M2E-SLF4JBinding=jars/${slf4jBinding}
-includeresource: \
jars/=${jars.directory}/;recursive:=false;lib:=true;filter:=!${slf4jBinding},\
diff --git a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ExtensionResolutionExceptionFacade.java b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ExtensionResolutionExceptionFacade.java
index f3b9628046..62081f4276 100644
--- a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ExtensionResolutionExceptionFacade.java
+++ b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ExtensionResolutionExceptionFacade.java
@@ -15,8 +15,8 @@
import java.io.File;
+import org.apache.maven.api.cli.extensions.CoreExtension;
import org.apache.maven.cli.internal.ExtensionResolutionException;
-import org.apache.maven.cli.internal.extension.model.CoreExtension;
import org.codehaus.plexus.PlexusContainerException;
/**
diff --git a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/LifecycleExecutionPlanCalculatorFacade.java b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/LifecycleExecutionPlanCalculatorFacade.java
index 583207e304..26bc89e382 100644
--- a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/LifecycleExecutionPlanCalculatorFacade.java
+++ b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/LifecycleExecutionPlanCalculatorFacade.java
@@ -13,6 +13,8 @@
package org.eclipse.m2e.internal.maven.compat;
+import java.util.HashSet;
+
import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
import org.apache.maven.plugin.MojoExecution;
@@ -43,6 +45,6 @@ public LifecycleExecutionPlanCalculatorFacade(LifecycleExecutionPlanCalculator d
*/
public void setupMojoExecution(MavenSession session, MavenProject project, MojoExecution mojoExecution)
throws Exception {
- delegate.setupMojoExecution(session, project, mojoExecution);
+ delegate.setupMojoExecution(session, project, mojoExecution, new HashSet<>());
}
}
diff --git a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/PlexusContainerFacade.java b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/PlexusContainerFacade.java
index 4a43e2b008..3b2f8c6fe1 100644
--- a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/PlexusContainerFacade.java
+++ b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/PlexusContainerFacade.java
@@ -17,11 +17,14 @@
import java.io.InputStream;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
+import org.apache.maven.api.cli.extensions.CoreExtension;
+import org.apache.maven.api.cli.extensions.InputSource;
import org.apache.maven.cli.internal.BootstrapCoreExtensionManager;
-import org.apache.maven.cli.internal.extension.model.CoreExtension;
-import org.apache.maven.cli.internal.extension.model.io.xpp3.CoreExtensionsXpp3Reader;
+import org.apache.maven.cling.internal.extension.io.CoreExtensionsStaxReader;
import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.scope.internal.MojoExecutionScope;
import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule;
import org.apache.maven.extension.internal.CoreExtensionEntry;
import org.apache.maven.session.scope.internal.SessionScopeModule;
@@ -64,7 +67,8 @@ public static List loadCoreExtensions(ClassRealm coreRealm,
}
List extensions;
try (InputStream is = new FileInputStream(extensionsXml)) {
- extensions = new CoreExtensionsXpp3Reader().read(is).getExtensions();
+ extensions = new CoreExtensionsStaxReader().read(is, true, new InputSource(extensionsXml.toString()))
+ .getExtensions();
}
if (extensions.isEmpty()) {
return Collections.emptyList();
@@ -89,8 +93,9 @@ protected void configure() {
thread.setContextClassLoader(container.getContainerRealm());
BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class);
- return resolver.loadCoreExtensions(requestFactory.createFor(container), coreEntry.getExportedArtifacts(),
- extensions);
+ MavenExecutionRequest request = requestFactory.createFor(container);
+ Set exportedArtifacts = coreEntry.getExportedArtifacts();
+ return resolver.loadCoreExtensions(request, exportedArtifacts, extensions);
} finally {
thread.setContextClassLoader(ccl);
container.dispose();
@@ -103,9 +108,8 @@ public static interface MavenExecutionRequesFactory {
public void loadExtension(CoreExtensionEntry extension) throws ComponentLookupException {
if (container instanceof DefaultPlexusContainer) {
- ((DefaultPlexusContainer) container).discoverComponents(extension.getClassRealm(),
- new SessionScopeModule(container),
- new MojoExecutionScopeModule(container));
+ ((DefaultPlexusContainer) container).discoverComponents(extension.getClassRealm(), new SessionScopeModule(),
+ new MojoExecutionScopeModule(new MojoExecutionScope()));
}
}
diff --git a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ReadonlyMavenExecutionRequest.java b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ReadonlyMavenExecutionRequest.java
index 51f948cdb9..6ff5d47140 100644
--- a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ReadonlyMavenExecutionRequest.java
+++ b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/internal/maven/compat/ReadonlyMavenExecutionRequest.java
@@ -16,6 +16,8 @@
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.nio.file.Path;
+import java.time.Instant;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -26,6 +28,8 @@
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
import org.apache.maven.execution.ExecutionListener;
import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.ProfileActivation;
+import org.apache.maven.execution.ProjectActivation;
import org.apache.maven.model.Profile;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.settings.Mirror;
@@ -630,4 +634,104 @@ public MavenExecutionRequest setToolchains(Map> too
throw new IllegalStateException();
}
+ @Override
+ public MavenExecutionRequest setStartInstant(Instant start) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public Instant getStartInstant() {
+ return request.getStartInstant();
+ }
+
+ @Override
+ public MavenExecutionRequest setResume(boolean resume) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public boolean isResume() {
+ return request.isResume();
+ }
+
+ @Override
+ public boolean isIgnoreMissingArtifactDescriptor() {
+ return request.isIgnoreMissingArtifactDescriptor();
+ }
+
+ @Override
+ public MavenExecutionRequest setIgnoreMissingArtifactDescriptor(boolean ignoreMissing) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public boolean isIgnoreInvalidArtifactDescriptor() {
+ return request.isIgnoreInvalidArtifactDescriptor();
+ }
+
+ @Override
+ public MavenExecutionRequest setIgnoreInvalidArtifactDescriptor(boolean ignoreInvalid) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public ProjectActivation getProjectActivation() {
+ return request.getProjectActivation();
+ }
+
+ @Override
+ public ProfileActivation getProfileActivation() {
+ return request.getProfileActivation();
+ }
+
+ @Override
+ public File getProjectSettingsFile() {
+ return request.getProjectSettingsFile();
+ }
+
+ @Override
+ public MavenExecutionRequest setProjectSettingsFile(File projectSettingsFile) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public File getInstallationSettingsFile() {
+ return request.getInstallationSettingsFile();
+ }
+
+ @Override
+ public MavenExecutionRequest setInstallationSettingsFile(File installationSettingsFile) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public File getInstallationToolchainsFile() {
+ return request.getInstallationToolchainsFile();
+ }
+
+ @Override
+ public MavenExecutionRequest setInstallationToolchainsFile(File installationToolchainsFile) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public MavenExecutionRequest setTopDirectory(Path topDirectory) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public Path getTopDirectory() {
+ return request.getTopDirectory();
+ }
+
+ @Override
+ public MavenExecutionRequest setRootDirectory(Path rootDirectory) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public Path getRootDirectory() {
+ return request.getRootDirectory();
+ }
+
}
diff --git a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/slf4j2/provider/MavenSLF4JProvider.java b/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/slf4j2/provider/MavenSLF4JProvider.java
deleted file mode 100644
index ad86903a73..0000000000
--- a/org.eclipse.m2e.maven.runtime/src/main/java/org/eclipse/m2e/slf4j2/provider/MavenSLF4JProvider.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/********************************************************************************
- * Copyright (c) 2023, 2023 Hannes Wellmann and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Hannes Wellmann - initial API and implementation
- ********************************************************************************/
-
-package org.eclipse.m2e.slf4j2.provider;
-
-import org.slf4j.ILoggerFactory;
-import org.slf4j.IMarkerFactory;
-import org.slf4j.helpers.BasicMarkerFactory;
-import org.slf4j.helpers.NOPMDCAdapter;
-import org.slf4j.impl.SimpleLoggerFactory;
-import org.slf4j.spi.MDCAdapter;
-import org.slf4j.spi.SLF4JServiceProvider;
-
-public class MavenSLF4JProvider implements SLF4JServiceProvider {
- // Based on org.slf4j.simple.SimpleServiceProvider from org.slf4j:slf4j-simple
-
- private ILoggerFactory loggerFactory;
- private final IMarkerFactory markerFactory = new BasicMarkerFactory();
- private final MDCAdapter mdcAdapter = new NOPMDCAdapter();
-
- @Override
- public ILoggerFactory getLoggerFactory() {
- return loggerFactory;
- }
-
- @Override
- public IMarkerFactory getMarkerFactory() {
- return markerFactory;
- }
-
- @Override
- public MDCAdapter getMDCAdapter() {
- return mdcAdapter;
- }
-
- @Override
- public String getRequestedApiVersion() {
- // Declare the version of the maximum SLF4J API this implementation is
- // compatible with. The value of this field is modified with each major release.
- return "2.0.99";
- }
-
- @Override
- public void initialize() {
- loggerFactory = new SimpleLoggerFactory();
- }
-
-}
diff --git a/org.eclipse.m2e.maven.runtime/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider b/org.eclipse.m2e.maven.runtime/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider
deleted file mode 100644
index 9328c80d52..0000000000
--- a/org.eclipse.m2e.maven.runtime/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider
+++ /dev/null
@@ -1 +0,0 @@
-org.eclipse.m2e.slf4j2.provider.MavenSLF4JProvider
diff --git a/org.eclipse.m2e.mavenarchiver/META-INF/MANIFEST.MF b/org.eclipse.m2e.mavenarchiver/META-INF/MANIFEST.MF
index 386c0c9029..592d514439 100644
--- a/org.eclipse.m2e.mavenarchiver/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.mavenarchiver/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: m2e connector for the mavenarchiver and pom properties
Bundle-SymbolicName: org.eclipse.m2e.mavenarchiver;singleton:=true
-Bundle-Version: 2.1.100.qualifier
+Bundle-Version: 2.1.200.qualifier
Bundle-Vendor: Eclipse.org - m2e
Bundle-RequiredExecutionEnvironment: JavaSE-21
Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.0.0,5.0.0)",
org.eclipse.jdt.core;bundle-version="[3.0.0,4.0.0)"
Export-Package: org.eclipse.m2e.mavenarchiver.internal;x-friends="org.eclipse.m2e.mavenarchiver.tests"
Automatic-Module-Name: org.eclipse.m2e.mavenarchiver
diff --git a/org.eclipse.m2e.pde.connector/META-INF/MANIFEST.MF b/org.eclipse.m2e.pde.connector/META-INF/MANIFEST.MF
index d6f0665006..bf9d31bbe5 100644
--- a/org.eclipse.m2e.pde.connector/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.pde.connector/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: M2E PDE Connector
Bundle-SymbolicName: org.eclipse.m2e.pde.connector;singleton:=true
-Bundle-Version: 2.2.101.qualifier
+Bundle-Version: 2.2.201.qualifier
Automatic-Module-Name: org.eclipse.m2e.pde.connector
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: Eclipse.org - m2e
@@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.m2e.jdt;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.core.resources;bundle-version="3.16.0",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.pde.core;bundle-version="3.19.0",
org.eclipse.jdt.core,
org.eclipse.pde.ds.annotations
diff --git a/org.eclipse.m2e.pde.target/META-INF/MANIFEST.MF b/org.eclipse.m2e.pde.target/META-INF/MANIFEST.MF
index b20f16a20f..2fb4f6e16b 100644
--- a/org.eclipse.m2e.pde.target/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.pde.target/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-21
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.27.0,4.0.0)",
org.eclipse.pde.core;bundle-version="3.14.0",
org.eclipse.equinox.frameworkadmin;bundle-version="2.1.400",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.0,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[4,5)",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.resources
Export-Package: org.eclipse.m2e.pde.target;x-friends:="org.eclipse.m2e.pde.ui,org.eclipse.m2e.swtbot.tests",
diff --git a/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/MavenTargetBundle.java b/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/MavenTargetBundle.java
index 2e8528815a..3a98c931f3 100644
--- a/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/MavenTargetBundle.java
+++ b/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/MavenTargetBundle.java
@@ -23,8 +23,8 @@
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.impl.SyncContextFactory;
import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.spi.synccontext.SyncContextFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IProgressMonitor;
diff --git a/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/shared/MavenBundleWrapper.java b/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/shared/MavenBundleWrapper.java
index d2f898527d..73c942041c 100644
--- a/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/shared/MavenBundleWrapper.java
+++ b/org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/shared/MavenBundleWrapper.java
@@ -53,11 +53,11 @@
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.graph.DependencyVisitor;
-import org.eclipse.aether.impl.SyncContextFactory;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.spi.synccontext.SyncContextFactory;
import org.eclipse.core.runtime.Platform;
import org.eclipse.m2e.pde.target.shared.ProcessingMessage.Type;
import org.osgi.framework.Constants;
diff --git a/org.eclipse.m2e.pde.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.pde.ui/META-INF/MANIFEST.MF
index a1105e4bf8..0061606605 100644
--- a/org.eclipse.m2e.pde.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.pde.ui/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.19.0",
org.eclipse.jface,
org.eclipse.pde.ui;bundle-version="3.12.0",
org.eclipse.m2e.core.ui;bundle-version="2.0.3",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.pde.target;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.databinding;bundle-version="1.10.100",
org.eclipse.jface.databinding;bundle-version="1.12.200",
diff --git a/org.eclipse.m2e.profiles.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.profiles.core/META-INF/MANIFEST.MF
index 19974684f3..52ba4194bf 100644
--- a/org.eclipse.m2e.profiles.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.profiles.core/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@ Bundle-Version: 2.2.200.qualifier
Require-Bundle: org.eclipse.core.runtime;bundle-version="3.7.0",
org.eclipse.core.resources;bundle-version="3.6.0",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)"
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Vendor: Eclipse.org - m2e
diff --git a/org.eclipse.m2e.refactoring/META-INF/MANIFEST.MF b/org.eclipse.m2e.refactoring/META-INF/MANIFEST.MF
index 5e53c66fed..ea3a116784 100644
--- a/org.eclipse.m2e.refactoring/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.refactoring/META-INF/MANIFEST.MF
@@ -3,10 +3,10 @@ Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-SymbolicName: org.eclipse.m2e.refactoring;singleton:=true
-Bundle-Version: 2.1.100.qualifier
+Bundle-Version: 2.1.200.qualifier
Bundle-Activator: org.eclipse.m2e.refactoring.internal.Activator
Require-Bundle: org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.core.filebuffers,
diff --git a/org.eclipse.m2e.scm/META-INF/MANIFEST.MF b/org.eclipse.m2e.scm/META-INF/MANIFEST.MF
index 0c1560c28a..34690314a3 100644
--- a/org.eclipse.m2e.scm/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.scm/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.m2e.scm;singleton:=true
-Bundle-Version: 2.1.100.qualifier
+Bundle-Version: 2.1.200.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
@@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="3.5.2",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.runtime;bundle-version="3.5.0",
org.eclipse.jface;bundle-version="3.5.2",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[3.8.6,5.0.0)",
org.eclipse.m2e.core.ui;bundle-version="[2.0.0,3.0.0)",
org.eclipse.ui.workbench;bundle-version="3.5.2",
org.eclipse.ui.ide;bundle-version="3.5.1"
diff --git a/org.eclipse.m2e.sdk.feature/feature.xml b/org.eclipse.m2e.sdk.feature/feature.xml
index 97dca0c32c..8e9b259699 100644
--- a/org.eclipse.m2e.sdk.feature/feature.xml
+++ b/org.eclipse.m2e.sdk.feature/feature.xml
@@ -2,7 +2,7 @@
@@ -23,40 +23,20 @@
id="org.eclipse.m2e.feature"
version="0.0.0"/>
-
-
-
-
-
-
-
-
-
-
diff --git a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
index 37eacaf932..b1b31d286f 100644
--- a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: M2E Testing Helpers
Bundle-SymbolicName: org.eclipse.m2e.tests.common;singleton:=true
-Bundle-Version: 2.1.1.qualifier
+Bundle-Version: 2.1.101.qualifier
Require-Bundle: org.junit;bundle-version="4.0.0",
org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.m2e.maven.runtime;bundle-version="[3.9.900,4.0.0)",
+ org.eclipse.m2e.maven.runtime;bundle-version="[4,5)",
org.eclipse.m2e.jdt;bundle-version="[2.0.0,3.0.0)",
org.eclipse.core.runtime,
org.eclipse.jdt.core,
diff --git a/pom.xml b/pom.xml
index c22dca6a44..e44b2c3a03 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,7 +78,7 @@
org.eclipse.m2e.sdk.feature
org.eclipse.m2e.logback.feature
org.eclipse.m2e.pde.feature
- org.eclipse.m2e.repository
+
org.eclipse.m2e.core.tests
@@ -99,7 +99,7 @@
org.eclipse.m2e
org.eclipse.m2e.maven.runtime
- 3.9.1101-SNAPSHOT
+ 4.0.0-SNAPSHOT
diff --git a/target-platform/m2e-runtimes.target b/target-platform/m2e-runtimes.target
index 13fabab5eb..bd4e5698ec 100644
--- a/target-platform/m2e-runtimes.target
+++ b/target-platform/m2e-runtimes.target
@@ -3,8 +3,12 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/target-platform/target-platform.target b/target-platform/target-platform.target
index 6037d1d3ee..1cd834c4d1 100644
--- a/target-platform/target-platform.target
+++ b/target-platform/target-platform.target
@@ -152,7 +152,7 @@ Bundle-Vendor: Eclipse.org - m2e
Eclipse-ExtensibleAPI: true
Export-Package: META-INF.plexus;-noimport:=true;x-internal:=true, \
org.apache.maven.archetype.*;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui"
-Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[3.8.0,4.0.0)",com.ibm.icu
+Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[4,5)",com.ibm.icu
Import-Package: org.jdom2*
]]>
@@ -189,6 +189,6 @@ Export-Package: org.apache.maven.*;-noimport:=true;provider=m2e;mandatory
Import-Package: !*
]]>
-
+