From d4d4f23d7d98fb5eb66f2bcbba62cfd54f195a4f Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Sat, 8 Feb 2025 19:55:53 +0000 Subject: [PATCH] Fixes (#1253) Seems MSC fork does not allow pushes from users who have commit rights on forked maven-mvnd, so am incorporating @ascheman changes here as well. This PR is: * fixes from PR https://github.com/apache/maven-mvnd/pull/1252 * plus fix SO isse (self injected cache) * plus migrated whole daemon to Maven DI (from javax.inject) except those that override Sisu components * ported latest Maven changes --- .github/workflows/early-access.yaml | 4 +- .../mvnd/client/DaemonConnector.java | 4 +- .../apache/maven/cli/DaemonMavenCling.java | 33 +- .../apache/maven/cli/DaemonMavenInvoker.java | 12 +- .../apache/maven/cli/DaemonMavenParser.java | 11 +- .../cli/DaemonMessageBuilderFactory.java | 9 +- .../DaemonPlexusContainerCapsuleFactory.java | 10 - .../maven/project/SnapshotModelCache.java | 55 ---- .../project/SnapshotModelCacheFactory.java | 53 ---- .../maven/settings/SettingsUtilsV4.java | 281 ------------------ .../mvnd/cache/impl/DefaultCacheFactory.java | 7 +- .../InvalidatingExtensionRealmCache.java | 9 +- .../InvalidatingPluginArtifactsCache.java | 9 +- .../InvalidatingPluginDescriptorCache.java | 14 +- .../InvalidatingPluginRealmCache.java | 9 +- .../InvalidatingProjectArtifactsCache.java | 9 +- .../InvalidatingRealmCacheEventSpy.java | 9 +- .../DefaultBuildResumptionAnalyzer.java | 5 +- .../DefaultBuildResumptionDataRepository.java | 5 +- .../mvnd/interactivity/DaemonPrompter.java | 2 +- ...ger.properties => maven.logger.properties} | 64 ++-- pom.xml | 8 +- 22 files changed, 109 insertions(+), 513 deletions(-) delete mode 100644 daemon/src/main/java/org/apache/maven/project/SnapshotModelCache.java delete mode 100644 daemon/src/main/java/org/apache/maven/project/SnapshotModelCacheFactory.java delete mode 100644 daemon/src/main/java/org/apache/maven/settings/SettingsUtilsV4.java rename integration-tests/src/test/resources/{simplelogger.properties => maven.logger.properties} (62%) diff --git a/.github/workflows/early-access.yaml b/.github/workflows/early-access.yaml index d1b15cde..669de919 100644 --- a/.github/workflows/early-access.yaml +++ b/.github/workflows/early-access.yaml @@ -63,8 +63,8 @@ jobs: strategy: fail-fast: false matrix: - # binaries wanted: linux amd64, mac intel, mac M1, windows x86 - os: [ ubuntu-latest, macos-15, macos-13, macos-14, windows-latest ] + # binaries wanted: linux amd64, mac M1, mac intel, windows x86 + os: [ ubuntu-latest, macos-latest, macos-13, windows-latest ] runs-on: ${{ matrix.os }} steps: diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/DaemonConnector.java b/client/src/main/java/org/mvndaemon/mvnd/client/DaemonConnector.java index 748ec60c..454346c8 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/DaemonConnector.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/DaemonConnector.java @@ -42,7 +42,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; -import org.apache.maven.slf4j.MavenSimpleLogger; +import org.apache.maven.api.Constants; import org.mvndaemon.mvnd.common.DaemonCompatibilitySpec; import org.mvndaemon.mvnd.common.DaemonCompatibilitySpec.Result; import org.mvndaemon.mvnd.common.DaemonConnection; @@ -440,7 +440,7 @@ public class DaemonConnector { args.add("-Dmaven.conf=" + mvndHome.resolve("mvn").resolve("conf")); args.add("-Dclassworlds.conf=" + mvndHome.resolve("bin").resolve("mvnd-daemon.conf")); - args.add("-D" + MavenSimpleLogger.LOG_FILE_KEY + "=" + args.add("-D" + Constants.MAVEN_LOGGER_LOG_FILE + "=" + parameters.daemonStorage().resolve("daemon-" + daemonId + ".log")); Environment.MVND_JAVA_HOME.addSystemProperty( diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCling.java b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCling.java index 55690f8f..26125366 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCling.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCling.java @@ -25,9 +25,10 @@ import java.util.List; import java.util.Map; import java.util.function.Supplier; +import org.apache.maven.api.cli.InvokerException; import org.apache.maven.api.cli.ParserRequest; -import org.apache.maven.cling.invoker.ProtoLogger; import org.apache.maven.cling.invoker.ProtoLookup; +import org.apache.maven.cling.invoker.logging.SystemLogger; import org.apache.maven.logging.BuildEventListener; import org.codehaus.plexus.classworlds.ClassWorld; import org.codehaus.plexus.classworlds.realm.ClassRealm; @@ -72,17 +73,25 @@ public class DaemonMavenCling implements DaemonCli { EnvHelper.environment(workingDir, env); System.setProperty("maven.multiModuleProjectDirectory", projectDir); - return invoker.invoke(parser.parseInvocation(ParserRequest.builder( - "mvnd", "Maven Daemon", args, new ProtoLogger(), new DaemonMessageBuilderFactory()) - .cwd(Paths.get(workingDir)) - .in(in) - .out(out) - .err(err) - .lookup(ProtoLookup.builder() - .addMapping(Environment.class, () -> env) - .addMapping(BuildEventListener.class, buildEventListener) - .build()) - .build())); + try { + return invoker.invoke(parser.parseInvocation( + ParserRequest.builder("mvnd", "Maven Daemon", args, new DaemonMessageBuilderFactory()) + .cwd(Paths.get(workingDir)) + .stdIn(in) + .stdOut(out) + .stdErr(err) + .lookup(ProtoLookup.builder() + .addMapping(Environment.class, () -> env) + .addMapping(BuildEventListener.class, buildEventListener) + .build()) + .build())); + } catch (InvokerException.ExitException e) { + return e.getExitCode(); + } catch (Exception e) { + // last resort; as ideally we should get ExitException only + new SystemLogger(err).error(e.getMessage(), e); + return 1; + } } /** diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenInvoker.java b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenInvoker.java index 417433da..69be4ab7 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenInvoker.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenInvoker.java @@ -20,7 +20,6 @@ package org.apache.maven.cli; import java.io.OutputStream; import java.io.PrintStream; -import java.util.Optional; import org.apache.maven.api.cli.InvokerException; import org.apache.maven.api.cli.InvokerRequest; @@ -48,8 +47,8 @@ public class DaemonMavenInvoker extends ResidentMavenInvoker { MessageUtils.systemInstall( builder -> { builder.streams( - context.invokerRequest.in().orElseThrow(), - context.invokerRequest.out().orElseThrow()); + context.invokerRequest.stdIn().orElseThrow(), + context.invokerRequest.stdOut().orElseThrow()); builder.systemOutput(TerminalBuilder.SystemOutput.ForcedSysOut); builder.provider(TerminalBuilder.PROP_PROVIDER_EXEC); if (context.coloredOutput != null) { @@ -68,10 +67,9 @@ public class DaemonMavenInvoker extends ResidentMavenInvoker { @Override protected void doConfigureWithTerminal(MavenContext context, Terminal terminal) { super.doConfigureWithTerminal(context, terminal); - Optional rawStreams = context.invokerRequest.options().rawStreams(); - if (rawStreams.orElse(false)) { - System.setOut(printStream(context.invokerRequest.out().orElseThrow())); - System.setErr(printStream(context.invokerRequest.err().orElseThrow())); + if (context.invokerRequest.options().rawStreams().orElse(false)) { + System.setOut(printStream(context.invokerRequest.stdOut().orElseThrow())); + System.setErr(printStream(context.invokerRequest.stdErr().orElseThrow())); } } diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenParser.java b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenParser.java index 379bb06a..75114140 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenParser.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenParser.java @@ -33,7 +33,6 @@ import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.cli.ParseException; -import org.apache.maven.api.cli.ParserException; import org.apache.maven.api.cli.extensions.CoreExtension; import org.apache.maven.api.cli.mvn.MavenOptions; import org.apache.maven.cling.internal.extension.io.CoreExtensionsStaxReader; @@ -42,16 +41,12 @@ import org.mvndaemon.mvnd.common.Environment; public class DaemonMavenParser extends MavenParser { @Override - protected MavenOptions parseArgs(String source, List args) throws ParserException { - try { - return CommonsCliDaemonMavenOptions.parse(source, args.toArray(new String[0])); - } catch (ParseException e) { - throw new ParserException("Failed to parse source " + source + ": " + e.getMessage(), e.getCause()); - } + protected MavenOptions parseArgs(String source, List args) throws ParseException { + return CommonsCliDaemonMavenOptions.parse(source, args.toArray(new String[0])); } @Override - protected Map populateSystemProperties(LocalContext context) throws ParserException { + protected Map populateSystemProperties(LocalContext context) { HashMap systemProperties = new HashMap<>(super.populateSystemProperties(context)); Map env = context.parserRequest .lookup() diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonMessageBuilderFactory.java b/daemon/src/main/java/org/apache/maven/cli/DaemonMessageBuilderFactory.java index cc154ecc..8d8029f7 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonMessageBuilderFactory.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonMessageBuilderFactory.java @@ -18,17 +18,16 @@ */ package org.apache.maven.cli; -import javax.inject.Named; -import javax.inject.Singleton; - import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.jline.JLineMessageBuilderFactory; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.common.Environment; @Named @Singleton -@Priority(10) +@Priority(20) @Experimental public class DaemonMessageBuilderFactory extends JLineMessageBuilderFactory { diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonPlexusContainerCapsuleFactory.java b/daemon/src/main/java/org/apache/maven/cli/DaemonPlexusContainerCapsuleFactory.java index 2509c231..215bdae8 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonPlexusContainerCapsuleFactory.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonPlexusContainerCapsuleFactory.java @@ -31,21 +31,11 @@ import org.apache.maven.extension.internal.CoreExtensionEntry; import org.mvndaemon.mvnd.common.Environment; public class DaemonPlexusContainerCapsuleFactory extends PlexusContainerCapsuleFactory { - - @Override - protected Set collectExportedArtifacts( - CoreExtensionEntry coreEntry, List extensionEntries) { - HashSet result = new HashSet<>(super.collectExportedArtifacts(coreEntry, extensionEntries)); - result.add("org.codehaus.plexus:plexus-interactivity-api"); - return result; - } - @Override protected Set collectExportedPackages( CoreExtensionEntry coreEntry, List extensionEntries) { HashSet result = new HashSet<>(super.collectExportedPackages(coreEntry, extensionEntries)); result.add("org.mvndaemon.mvnd.interactivity"); - result.add("org.codehaus.plexus.components.interactivity"); return result; } diff --git a/daemon/src/main/java/org/apache/maven/project/SnapshotModelCache.java b/daemon/src/main/java/org/apache/maven/project/SnapshotModelCache.java deleted file mode 100644 index 0ab483af..00000000 --- a/daemon/src/main/java/org/apache/maven/project/SnapshotModelCache.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.apache.maven.project; - -import java.util.Objects; -import java.util.function.Supplier; - -import org.apache.maven.api.services.Source; -import org.apache.maven.api.services.model.ModelCache; - -public class SnapshotModelCache implements ModelCache { - - private final ModelCache globalCache; - private final ModelCache reactorCache; - - public SnapshotModelCache(ModelCache globalCache, ModelCache reactorCache) { - this.globalCache = Objects.requireNonNull(globalCache); - this.reactorCache = Objects.requireNonNull(reactorCache); - } - - @Override - public T computeIfAbsent(String groupId, String artifactId, String version, String tag, Supplier data) { - return getDelegate(version).computeIfAbsent(groupId, artifactId, version, tag, data); - } - - @Override - public T computeIfAbsent(Source path, String tag, Supplier data) { - return reactorCache.computeIfAbsent(path, tag, data); - } - - @Override - public void clear() { - reactorCache.clear(); - } - - private ModelCache getDelegate(String version) { - return version.contains("SNAPSHOT") || version.contains("${") ? reactorCache : globalCache; - } -} diff --git a/daemon/src/main/java/org/apache/maven/project/SnapshotModelCacheFactory.java b/daemon/src/main/java/org/apache/maven/project/SnapshotModelCacheFactory.java deleted file mode 100644 index d276439f..00000000 --- a/daemon/src/main/java/org/apache/maven/project/SnapshotModelCacheFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.apache.maven.project; - -import org.apache.maven.api.di.Inject; -import org.apache.maven.api.di.Named; -import org.apache.maven.api.di.Priority; -import org.apache.maven.api.di.Singleton; -import org.apache.maven.api.services.model.ModelCache; -import org.apache.maven.api.services.model.ModelCacheFactory; -import org.apache.maven.internal.impl.model.DefaultModelCacheFactory; - -import static org.mvndaemon.mvnd.common.Environment.MVND_NO_MODEL_CACHE; - -@Singleton -@Named -@Priority(10) -public class SnapshotModelCacheFactory implements ModelCacheFactory { - - private final ModelCacheFactory factory; - private final ModelCache globalCache; - - @Inject - public SnapshotModelCacheFactory(DefaultModelCacheFactory factory) { - this.factory = factory; - this.globalCache = factory.newInstance(); - } - - @Override - public ModelCache newInstance() { - boolean noModelCache = - Boolean.parseBoolean(MVND_NO_MODEL_CACHE.asOptional().orElse(MVND_NO_MODEL_CACHE.getDefault())); - ModelCache reactorCache = factory.newInstance(); - ModelCache globalCache = noModelCache ? reactorCache : this.globalCache; - return new SnapshotModelCache(globalCache, reactorCache); - } -} diff --git a/daemon/src/main/java/org/apache/maven/settings/SettingsUtilsV4.java b/daemon/src/main/java/org/apache/maven/settings/SettingsUtilsV4.java deleted file mode 100644 index dd9e40c5..00000000 --- a/daemon/src/main/java/org/apache/maven/settings/SettingsUtilsV4.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * 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.apache.maven.settings; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import org.apache.maven.api.model.ActivationFile; -import org.apache.maven.api.settings.Activation; -import org.apache.maven.api.settings.ActivationOS; -import org.apache.maven.api.settings.ActivationProperty; -import org.apache.maven.api.settings.Profile; -import org.apache.maven.api.settings.Repository; -import org.apache.maven.api.settings.RepositoryPolicy; -import org.apache.maven.api.settings.Settings; -import org.apache.maven.settings.v4.SettingsMerger; - -/** - * Several convenience methods to handle settings - * - * @author Vincent Siveton - */ -public final class SettingsUtilsV4 { - - private SettingsUtilsV4() { - // don't allow construction. - } - - /** - * @param dominant - * @param recessive - */ - public static Settings merge(Settings dominant, Settings recessive) { - return new SettingsMerger().merge(dominant, recessive, true, Collections.emptyMap()); - } - - /** - * @param modelProfile - * @return a profile - */ - public static Profile convertToSettingsProfile(org.apache.maven.api.model.Profile modelProfile) { - Profile.Builder profile = Profile.newBuilder(); - - profile.id(modelProfile.getId()); - - org.apache.maven.api.model.Activation modelActivation = modelProfile.getActivation(); - - if (modelActivation != null) { - Activation.Builder activation = Activation.newBuilder(); - - activation.activeByDefault(modelActivation.isActiveByDefault()); - - activation.jdk(modelActivation.getJdk()); - - org.apache.maven.api.model.ActivationProperty modelProp = modelActivation.getProperty(); - - if (modelProp != null) { - ActivationProperty prop = ActivationProperty.newBuilder() - .name(modelProp.getName()) - .value(modelProp.getValue()) - .build(); - activation.property(prop); - } - - org.apache.maven.api.model.ActivationOS modelOs = modelActivation.getOs(); - - if (modelOs != null) { - ActivationOS os = ActivationOS.newBuilder() - .arch(modelOs.getArch()) - .family(modelOs.getFamily()) - .name(modelOs.getName()) - .version(modelOs.getVersion()) - .build(); - - activation.os(os); - } - - ActivationFile modelFile = modelActivation.getFile(); - - if (modelFile != null) { - org.apache.maven.api.settings.ActivationFile file = - org.apache.maven.api.settings.ActivationFile.newBuilder() - .exists(modelFile.getExists()) - .missing(modelFile.getMissing()) - .build(); - - activation.file(file); - } - - profile.activation(activation.build()); - } - - profile.properties(modelProfile.getProperties().entrySet().stream() - .collect(Collectors.toMap( - e -> e.getKey().toString(), e -> e.getValue().toString()))); - - List repos = modelProfile.getRepositories(); - if (repos != null) { - List repositories = new ArrayList<>(); - for (org.apache.maven.api.model.Repository repo : repos) { - repositories.add(convertToSettingsRepository(repo)); - } - profile.repositories(repositories); - } - - List pluginRepos = modelProfile.getPluginRepositories(); - if (pluginRepos != null) { - List repositories = new ArrayList<>(); - for (org.apache.maven.api.model.Repository pluginRepo : pluginRepos) { - repositories.add(convertToSettingsRepository(pluginRepo)); - } - profile.pluginRepositories(repositories); - } - - return profile.build(); - } - - /** - * @param settingsProfile - * @return a profile - */ - public static org.apache.maven.api.model.Profile convertFromSettingsProfile(Profile settingsProfile) { - org.apache.maven.api.model.Profile.Builder profile = org.apache.maven.api.model.Profile.newBuilder(); - - profile.id(settingsProfile.getId()); - - Activation settingsActivation = settingsProfile.getActivation(); - - if (settingsActivation != null) { - org.apache.maven.api.model.Activation.Builder activation = - org.apache.maven.api.model.Activation.newBuilder(); - - activation.activeByDefault(settingsActivation.isActiveByDefault()); - - activation.jdk(settingsActivation.getJdk()); - - ActivationProperty settingsProp = settingsActivation.getProperty(); - if (settingsProp != null) { - activation.property(org.apache.maven.api.model.ActivationProperty.newBuilder() - .name(settingsProp.getName()) - .value(settingsProp.getValue()) - .build()); - } - - ActivationOS settingsOs = settingsActivation.getOs(); - if (settingsOs != null) { - activation.os(org.apache.maven.api.model.ActivationOS.newBuilder() - .arch(settingsOs.getArch()) - .family(settingsOs.getFamily()) - .name(settingsOs.getName()) - .version(settingsOs.getVersion()) - .build()); - } - - org.apache.maven.api.settings.ActivationFile settingsFile = settingsActivation.getFile(); - if (settingsFile != null) { - activation.file(ActivationFile.newBuilder() - .exists(settingsFile.getExists()) - .missing(settingsFile.getMissing()) - .build()); - } - - profile.activation(activation.build()); - } - - profile.properties(settingsProfile.getProperties()); - - List repos = settingsProfile.getRepositories(); - if (repos != null) { - profile.repositories(repos.stream() - .map(SettingsUtilsV4::convertFromSettingsRepository) - .collect(Collectors.toList())); - } - - List pluginRepos = settingsProfile.getPluginRepositories(); - if (pluginRepos != null) { - profile.pluginRepositories(pluginRepos.stream() - .map(SettingsUtilsV4::convertFromSettingsRepository) - .collect(Collectors.toList())); - } - - org.apache.maven.api.model.Profile value = profile.build(); - value.setSource("settings.xml"); - return value; - } - - /** - * @param settingsRepo - * @return a repository - */ - private static org.apache.maven.api.model.Repository convertFromSettingsRepository(Repository settingsRepo) { - org.apache.maven.api.model.Repository.Builder repo = org.apache.maven.api.model.Repository.newBuilder(); - - repo.id(settingsRepo.getId()); - repo.layout(settingsRepo.getLayout()); - repo.name(settingsRepo.getName()); - repo.url(settingsRepo.getUrl()); - - if (settingsRepo.getSnapshots() != null) { - repo.snapshots(convertRepositoryPolicy(settingsRepo.getSnapshots())); - } - if (settingsRepo.getReleases() != null) { - repo.releases(convertRepositoryPolicy(settingsRepo.getReleases())); - } - - return repo.build(); - } - - /** - * @param settingsPolicy - * @return a RepositoryPolicy - */ - private static org.apache.maven.api.model.RepositoryPolicy convertRepositoryPolicy( - RepositoryPolicy settingsPolicy) { - org.apache.maven.api.model.RepositoryPolicy policy = org.apache.maven.api.model.RepositoryPolicy.newBuilder() - .enabled(Boolean.toString(settingsPolicy.isEnabled())) - .updatePolicy(settingsPolicy.getUpdatePolicy()) - .checksumPolicy(settingsPolicy.getChecksumPolicy()) - .build(); - return policy; - } - - /** - * @param modelRepo - * @return a repository - */ - private static Repository convertToSettingsRepository(org.apache.maven.api.model.Repository modelRepo) { - Repository repo = Repository.newBuilder() - .id(modelRepo.getId()) - .layout(modelRepo.getLayout()) - .name(modelRepo.getName()) - .url(modelRepo.getUrl()) - .snapshots(modelRepo.getSnapshots() != null ? convertRepositoryPolicy(modelRepo.getSnapshots()) : null) - .releases(modelRepo.getReleases() != null ? convertRepositoryPolicy(modelRepo.getReleases()) : null) - .build(); - - return repo; - } - - /** - * @param modelPolicy - * @return a RepositoryPolicy - */ - private static RepositoryPolicy convertRepositoryPolicy(org.apache.maven.api.model.RepositoryPolicy modelPolicy) { - RepositoryPolicy policy = RepositoryPolicy.newBuilder() - .enabled(modelPolicy.isEnabled()) - .updatePolicy(modelPolicy.getUpdatePolicy()) - .checksumPolicy(modelPolicy.getChecksumPolicy()) - .build(); - return policy; - } - - /** - * @param settings could be null - * @return a new instance of settings or null if settings was null. - */ - public static org.apache.maven.settings.Settings copySettings(org.apache.maven.settings.Settings settings) { - if (settings == null) { - return null; - } - return new org.apache.maven.settings.Settings(settings.getDelegate()); - } -} diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/impl/DefaultCacheFactory.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/impl/DefaultCacheFactory.java index c5751541..4e2a7e90 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/impl/DefaultCacheFactory.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/impl/DefaultCacheFactory.java @@ -18,10 +18,9 @@ */ package org.mvndaemon.mvnd.cache.impl; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.eclipse.sisu.Priority; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; import org.mvndaemon.mvnd.cache.CacheRecord; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingExtensionRealmCache.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingExtensionRealmCache.java index 8f9be623..1f1b4e96 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingExtensionRealmCache.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingExtensionRealmCache.java @@ -18,21 +18,20 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.DefaultExtensionRealmCache; import org.apache.maven.project.ExtensionDescriptor; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginArtifactsCache.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginArtifactsCache.java index 4173a065..e2df3289 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginArtifactsCache.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginArtifactsCache.java @@ -18,18 +18,17 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.DefaultPluginArtifactsCache; import org.apache.maven.plugin.PluginResolutionException; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java index 18f4205c..d31849d6 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java @@ -18,24 +18,26 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.nio.file.Path; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Stream; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.*; +import org.apache.maven.plugin.DefaultPluginDescriptorCache; +import org.apache.maven.plugin.InvalidPluginDescriptorException; +import org.apache.maven.plugin.PluginDescriptorParsingException; +import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; import org.mvndaemon.mvnd.cache.CacheRecord; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginRealmCache.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginRealmCache.java index 805866e5..2d7ce00c 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginRealmCache.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginRealmCache.java @@ -18,14 +18,14 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.DefaultPluginRealmCache; import org.apache.maven.plugin.PluginContainerException; @@ -33,7 +33,6 @@ import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingProjectArtifactsCache.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingProjectArtifactsCache.java index f97ea1a0..ab888a54 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingProjectArtifactsCache.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingProjectArtifactsCache.java @@ -18,10 +18,6 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.io.File; import java.nio.file.Path; import java.util.ArrayList; @@ -35,6 +31,10 @@ import java.util.Set; import java.util.stream.Stream; import org.apache.maven.RepositoryUtils; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Priority; +import org.apache.maven.api.di.Singleton; import org.apache.maven.artifact.Artifact; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.project.MavenProject; @@ -43,7 +43,6 @@ import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.LocalRepository; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.repository.WorkspaceRepository; -import org.eclipse.sisu.Priority; import org.mvndaemon.mvnd.cache.Cache; import org.mvndaemon.mvnd.cache.CacheFactory; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingRealmCacheEventSpy.java b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingRealmCacheEventSpy.java index e69da0a0..d82ef42d 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingRealmCacheEventSpy.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingRealmCacheEventSpy.java @@ -18,10 +18,6 @@ */ package org.mvndaemon.mvnd.cache.invalidating; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import java.net.URISyntaxException; import java.net.URL; import java.nio.file.FileSystems; @@ -31,12 +27,15 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import org.apache.maven.api.di.Inject; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Singleton; +import org.apache.maven.api.di.Typed; import org.apache.maven.eventspy.AbstractEventSpy; import org.apache.maven.eventspy.EventSpy; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.project.MavenProject; -import org.eclipse.sisu.Typed; import org.mvndaemon.mvnd.common.Environment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionAnalyzer.java b/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionAnalyzer.java index 96da4dc0..6cd4f19b 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionAnalyzer.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionAnalyzer.java @@ -37,13 +37,12 @@ package org.mvndaemon.mvnd.execution; * under the License. */ -import javax.inject.Named; -import javax.inject.Singleton; - import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Singleton; import org.apache.maven.execution.BuildFailure; import org.apache.maven.execution.BuildSuccess; import org.apache.maven.execution.MavenExecutionResult; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionDataRepository.java b/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionDataRepository.java index 5a4f7c63..9244376b 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionDataRepository.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/execution/DefaultBuildResumptionDataRepository.java @@ -37,9 +37,6 @@ package org.mvndaemon.mvnd.execution; * under the License. */ -import javax.inject.Named; -import javax.inject.Singleton; - import java.io.IOException; import java.io.Reader; import java.io.Writer; @@ -49,6 +46,8 @@ import java.nio.file.Paths; import java.util.Properties; import java.util.stream.Stream; +import org.apache.maven.api.di.Named; +import org.apache.maven.api.di.Singleton; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.project.MavenProject; import org.slf4j.Logger; diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/interactivity/DaemonPrompter.java b/daemon/src/main/java/org/mvndaemon/mvnd/interactivity/DaemonPrompter.java index ff26a52c..baff8a66 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/interactivity/DaemonPrompter.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/interactivity/DaemonPrompter.java @@ -40,7 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Named -@Priority(10) +@Priority(20) @Typed({Prompter.class, InputHandler.class, OutputHandler.class}) public class DaemonPrompter extends AbstractInputHandler implements Prompter, InputHandler, OutputHandler { diff --git a/integration-tests/src/test/resources/simplelogger.properties b/integration-tests/src/test/resources/maven.logger.properties similarity index 62% rename from integration-tests/src/test/resources/simplelogger.properties rename to integration-tests/src/test/resources/maven.logger.properties index 57a6bcc7..e0e0e1e6 100644 --- a/integration-tests/src/test/resources/simplelogger.properties +++ b/integration-tests/src/test/resources/maven.logger.properties @@ -1,32 +1,32 @@ -# 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. - -org.slf4j.simpleLogger.defaultLogLevel=info -org.slf4j.simpleLogger.showDateTime=false -org.slf4j.simpleLogger.showThreadName=false -org.slf4j.simpleLogger.showLogName=false -org.slf4j.simpleLogger.logFile=System.out -org.slf4j.simpleLogger.cacheOutputStream=true -org.slf4j.simpleLogger.levelInBrackets=true -org.slf4j.simpleLogger.log.Sisu=info -org.slf4j.simpleLogger.warnLevelString=WARNING - -# MNG-6181: mvn -X also prints all debug logging from HttpClient -# Be aware that the shaded packages are used -# org.apache.http -> org.apache.maven.wagon.providers.http.httpclient -org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient=off -org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient.wire=off +# 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. + +maven.logger.defaultLogLevel=info +maven.logger.showDateTime=false +maven.logger.showThreadName=false +maven.logger.showLogName=false +maven.logger.logFile=System.out +maven.logger.cacheOutputStream=true +maven.logger.levelInBrackets=true +maven.logger.log.Sisu=info +maven.logger.warnLevelString=WARNING + +# MNG-6181: mvn -X also prints all debug logging from HttpClient +# Be aware that the shaded packages are used +# org.apache.http -> org.apache.maven.wagon.providers.http.httpclient +maven.logger.log.org.apache.maven.wagon.providers.http.httpclient=off +maven.logger.log.org.apache.maven.wagon.providers.http.httpclient.wire=off diff --git a/pom.xml b/pom.xml index 5fab3a77..118829ac 100644 --- a/pom.xml +++ b/pom.xml @@ -79,15 +79,15 @@ 3.27.2 1.27.1 24.1.1 - 0.10.4 - 4.0.24 + 0.10.5 + 4.0.25 2.4.1 - 3.28.0 + 3.29.0 4.0.0-rc-3-SNAPSHOT 3.9.9 - 2.0.5 + 2.0.6 2.0.16 0.9.0.M3 3.15.1