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: !* ]]> - +