diff --git a/bom/pom.xml b/bom/pom.xml index 3a8cb791..ca301c67 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -46,7 +46,7 @@ https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/ https://repository.jboss.org/nexus/content/repositories/snapshots/ - 3.9.8 + 4.0.0-beta-4 diff --git a/maven/impl-maven-archive/pom.xml b/maven/impl-maven-archive/pom.xml index d79619d1..ea52bab5 100644 --- a/maven/impl-maven-archive/pom.xml +++ b/maven/impl-maven-archive/pom.xml @@ -58,16 +58,17 @@ org.codehaus.plexus plexus-classworlds - - org.codehaus.plexus - plexus-component-annotations - javax.enterprise cdi-api + + com.google.inject + guice + ${version.com.google.guice} + diff --git a/maven/impl-maven-archive/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/packaging/AbstractCompilingProcessor.java b/maven/impl-maven-archive/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/packaging/AbstractCompilingProcessor.java index 923d800d..dfc2a1d9 100644 --- a/maven/impl-maven-archive/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/packaging/AbstractCompilingProcessor.java +++ b/maven/impl-maven-archive/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/packaging/AbstractCompilingProcessor.java @@ -22,11 +22,15 @@ import java.util.logging.Logger; import java.util.regex.Pattern; +import com.google.inject.Guice; import org.codehaus.plexus.compiler.CompilerConfiguration; import org.codehaus.plexus.compiler.CompilerException; import org.codehaus.plexus.compiler.CompilerMessage; import org.codehaus.plexus.compiler.CompilerResult; import org.codehaus.plexus.compiler.javac.JavacCompiler; +import org.eclipse.sisu.space.SpaceModule; +import org.eclipse.sisu.space.URLClassSpace; +import org.eclipse.sisu.wire.WireModule; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact; import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession; @@ -38,6 +42,7 @@ import org.jboss.shrinkwrap.resolver.impl.maven.task.AddScopedDependenciesTask; import org.jboss.shrinkwrap.resolver.impl.maven.util.Validate; import org.jboss.shrinkwrap.resolver.spi.maven.archive.packaging.PackagingProcessor; +import static org.eclipse.sisu.space.SpaceModule.LOCAL_INDEX; /** * Packaging processor which is able to compile Java sources @@ -52,21 +57,46 @@ public abstract class AbstractCompilingProcessor configure(MavenWorkingSession session) { this.session = session; return this; } protected AbstractCompilingProcessor compile(File inputDirectory, File outputDirectory, ScopeType... scopes) { - Validate.notNullAndNoNullValues(scopes, "Cannot compile sources, there were no scopes defined"); Validate.notNull(inputDirectory, "Directory with sources to be compiled must not be null"); Validate.notNull(outputDirectory, "Target directory for compiled sources must not be null"); - JavacCompiler compiler = new JavacCompiler(); + if ("".equals(compiler.getCompilerId())) { + log.warning("No compiler found, skipping compilation"); + return this; + } + CompilerConfiguration configuration = getCompilerConfiguration(); if (log.isLoggable(Level.FINE)) { diff --git a/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/CompilerPluginConfigurationTestCase.java b/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/CompilerPluginConfigurationTestCase.java index 961dfac0..52c23136 100644 --- a/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/CompilerPluginConfigurationTestCase.java +++ b/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/CompilerPluginConfigurationTestCase.java @@ -44,7 +44,7 @@ public void additionalCompilerArgs() { CompilerPluginConfiguration configuration = new CompilerPluginConfiguration(session.getParsedPomFile()); CompilerConfiguration compilerConf = configuration.asCompilerConfiguration(); compilerConf.setOutputLocation("target"); - String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0]); + String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0], compilerConf.getSourceVersion()); assertThat(Arrays.asList(args), hasItems("-verbose", "-Xlint:unchecked", "-Xlint:cast", "-source", "1.7")); @@ -59,7 +59,7 @@ public void compilerEncoding() { CompilerPluginConfiguration configuration = new CompilerPluginConfiguration(session.getParsedPomFile()); CompilerConfiguration compilerConf = configuration.asCompilerConfiguration(); compilerConf.setOutputLocation("target"); - String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0]); + String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0], compilerConf.getSourceVersion()); assertThat(Arrays.asList(args), hasItems("-verbose", "-Xlint:unchecked", "-Xlint:cast", "-source", "1.7", "-encoding", "ISO-8859-2")); @@ -74,7 +74,7 @@ public void compilerEncodingFromProperty() { CompilerPluginConfiguration configuration = new CompilerPluginConfiguration(session.getParsedPomFile()); CompilerConfiguration compilerConf = configuration.asCompilerConfiguration(); compilerConf.setOutputLocation("target"); - String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0]); + String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0], compilerConf.getSourceVersion()); assertThat(Arrays.asList(args), hasItems("-verbose", "-Xlint:unchecked", "-Xlint:cast", "-source", "1.7", "-encoding", "ISO-8859-2")); diff --git a/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/JarPluginConfigurationTestCase.java b/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/JarPluginConfigurationTestCase.java index 5bd67c9c..33276823 100644 --- a/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/JarPluginConfigurationTestCase.java +++ b/maven/impl-maven-archive/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/archive/plugins/JarPluginConfigurationTestCase.java @@ -40,7 +40,7 @@ public void additionalCompilerArguments() { CompilerPluginConfiguration configuration = new CompilerPluginConfiguration(session.getParsedPomFile()); CompilerConfiguration compilerConf = configuration.asCompilerConfiguration(); compilerConf.setOutputLocation("target"); - String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0]); + String[] args = JavacCompiler.buildCompilerArguments(compilerConf, new String[0], compilerConf.getSourceVersion()); diff --git a/maven/impl-maven/pom.xml b/maven/impl-maven/pom.xml index dfef3822..1554f8a1 100644 --- a/maven/impl-maven/pom.xml +++ b/maven/impl-maven/pom.xml @@ -67,26 +67,22 @@ plexus-classworlds ${version.org.codehaus.plexus-classworlds} - - org.codehaus.plexus - plexus-component-annotations - ${version.org.codehaus.plexus-component-annotations} - org.eclipse.sisu org.eclipse.sisu.plexus ${version.org.eclipse.plexus} - - org.codehaus.plexus - plexus-component-annotations - org.codehaus.plexus plexus-classworlds + + org.eclipse.sisu + org.eclipse.sisu.inject + ${version.org.eclipse.plexus} + com.google.inject @@ -101,6 +97,7 @@ com.google.guava failureaccess + 1.0.2 @@ -157,6 +154,7 @@ org.apache.maven.resolver maven-resolver-transport-http + 1.9.22 diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java index 1723ec26..bc4522cd 100644 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java +++ b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java @@ -21,16 +21,21 @@ import eu.maveniverse.maven.mima.context.Runtime; import eu.maveniverse.maven.mima.context.Runtimes; import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Properties; import java.util.Set; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import org.apache.maven.model.Model; import org.apache.maven.model.Profile; @@ -42,12 +47,16 @@ import org.apache.maven.model.building.ModelBuildingResult; import org.apache.maven.model.building.ModelProblem; import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.collection.CollectRequest; import org.eclipse.aether.collection.DependencyCollectionException; import org.eclipse.aether.collection.DependencySelector; +import org.eclipse.aether.graph.DefaultDependencyNode; +import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.repository.RemoteRepository.Builder; import org.eclipse.aether.repository.RepositoryPolicy; +import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; import org.eclipse.aether.resolution.ArtifactResult; import org.eclipse.aether.resolution.DependencyResolutionException; @@ -188,6 +197,76 @@ public MavenWorkingSession loadPomFromFile(File pomFile, Properties userProperti return this; } + private Collection resolveProjectLocal(final List depsForResolution, + Set additionalDependencies) { + Collection projectLocalDependencies = new ArrayList<>(depsForResolution.size()); + for (MavenDependency dependency : depsForResolution) { + Path resolved = resolveProjectLocal(dependency.getGroupId(), dependency.getArtifactId(), + dependency.getVersion(), Optional.ofNullable(dependency.getClassifier()), + Optional.ofNullable(dependency.getPackaging().getExtension()), additionalDependencies); + if (resolved != null && resolved.toFile().exists()) { + Artifact artifact = new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(), + dependency.getClassifier(), dependency.getPackaging().getExtension(), dependency.getVersion(), + null, resolved); + ArtifactResult result = new ArtifactResult(new ArtifactRequest() + .setDependencyNode(new DefaultDependencyNode( + new Dependency(artifact, dependency.getScope().name(), dependency.isOptional())))); + result.setArtifact(artifact); + projectLocalDependencies.add(result); + } + } + return projectLocalDependencies; + } + + private Path resolveProjectLocal(String groupId, String artifactId, String version, + Optional classifier, Optional extension, + Set additionalDependencies) { + Path findProjectLocalRepository = findProjectLocalRepository(); + if (findProjectLocalRepository == null) { + return null; + } + + Predicate isNotEmpty = s -> !s.isEmpty(); + Path directory = findProjectLocalRepository.resolve(groupId).resolve(artifactId).resolve(version); + String versionedArtifact = artifactId + "-" + version; + File consumerPom = directory.resolve(versionedArtifact + "-consumer.pom").toFile(); + if (consumerPom.exists()) { + additionalDependencies.addAll(loadPomFromFile(consumerPom).getParsedPomFile().getDependencies()); + } + + return findProjectLocalRepository.resolve(groupId).resolve(artifactId).resolve(version) + .resolve(versionedArtifact + + classifier.filter(isNotEmpty).map(c -> "-" + c).orElse("") + + "." + extension.filter(isNotEmpty).orElse("jar")); + } + + private List filterFromLocal(final List depsForResolution, + final Collection projectLocalDependencies) { + return depsForResolution.stream() + .filter(dependency -> projectLocalDependencies.stream() + .noneMatch(result -> MavenConverter.asArtifact(dependency, + getSession().getArtifactTypeRegistry()) + .setProperties(Collections.EMPTY_MAP) + .equals(result.getArtifact().setPath(null)))) + .collect(Collectors.toList()); + } + + /** + * @return absolute path to the project-local repository or null if not found + */ + private Path findProjectLocalRepository() { + Path targetPath = Paths.get("target/project-local-repo"); + Path currentPath = Paths.get("").toAbsolutePath(); + while (currentPath != null) { + Path path = currentPath.resolve(targetPath); + if (path.toFile().exists()) { + return path; + } + currentPath = currentPath.getParent(); + } + return null; + } + @Override public Collection resolveDependencies(final MavenResolutionStrategy strategy) throws ResolutionException { @@ -198,7 +277,12 @@ public Collection resolveDependencies(final MavenResoluti final List repos = this.getRemoteRepositories(); - final CollectRequest request = new CollectRequest(MavenConverter.asDependencies(depsForResolution, + Set allDependencies = new LinkedHashSet<>(depsForResolution); + Collection projectLocalDependencies = resolveProjectLocal(depsForResolution, allDependencies); + List unresolvedLocally = filterFromLocal( + allDependencies.stream().collect(Collectors.toList()), projectLocalDependencies); + + final CollectRequest request = new CollectRequest(MavenConverter.asDependencies(unresolvedLocally, getSession().getArtifactTypeRegistry()), MavenConverter.asDependencies(depManagement, getSession().getArtifactTypeRegistry()), repos); @@ -231,7 +315,11 @@ public Collection resolveDependencies(final MavenResoluti throw wrapException(e); } - final Collection resolvedArtifacts = new ArrayList<>(results.size()); + final Collection resolvedArtifacts = new ArrayList<>(results.size() + projectLocalDependencies.size()); + + for (final ArtifactResult result : projectLocalDependencies) { + resolvedArtifacts.add(MavenResolvedArtifactImpl.fromArtifactResult(result)); + } for (final ArtifactResult result : results) { resolvedArtifacts.add(MavenResolvedArtifactImpl.fromArtifactResult(result)); diff --git a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/AetherLoggerFactory.java b/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/AetherLoggerFactory.java deleted file mode 100644 index c1bd8fc3..00000000 --- a/maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/logging/AetherLoggerFactory.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2014, Red Hat Middleware LLC, and individual contributors - * by the @authors tag. See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * Licensed 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.jboss.shrinkwrap.resolver.impl.maven.logging; - -import java.util.logging.Level; - -import org.eclipse.aether.spi.log.LoggerFactory; - -/** - * A delegating logging factory, that uses Java Util Logging to log messages from Aether. It logs debug output using FINE level, - * whereas WARNING level is used for warning output. - * - * @author Karel Piwko - * - */ -public class AetherLoggerFactory implements LoggerFactory { - - @Override - public org.eclipse.aether.spi.log.Logger getLogger(String name) { - return new Logger(java.util.logging.Logger.getLogger(name)); - } - - public static class Logger implements org.eclipse.aether.spi.log.Logger { - - private final java.util.logging.Logger log; - - public Logger(java.util.logging.Logger logger) { - this.log = logger; - } - - @Override - public boolean isDebugEnabled() { - return log.isLoggable(Level.FINE); - } - - @Override - public void debug(String msg) { - log.log(Level.FINE, msg); - } - - @Override - public void debug(String msg, Throwable error) { - log.log(Level.FINE, msg, error); - } - - @Override - public boolean isWarnEnabled() { - return log.isLoggable(Level.WARNING); - } - - @Override - public void warn(String msg) { - log.log(Level.WARNING, msg); - } - - @Override - public void warn(String msg, Throwable error) { - log.log(Level.WARNING, msg, error); - } - } - -} diff --git a/maven/maven-plugin/pom.xml b/maven/maven-plugin/pom.xml index b2fb0dc5..4e379e59 100644 --- a/maven/maven-plugin/pom.xml +++ b/maven/maven-plugin/pom.xml @@ -93,6 +93,7 @@ org.apache.maven.plugins maven-plugin-plugin + 4.0.0-beta-1 shrinkwrap-resolver true diff --git a/pom.xml b/pom.xml index f8eb62be..3b19552e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.jboss jboss-parent - 39 + 46 @@ -30,24 +30,23 @@ 1.8 - 7.0.0 + 6.0.0 1.17.1 1.27.0 2.16.1 - 2.4.15 - 3.9.8 + 3.0.0-SNAPSHOT + 4.0.0-beta-4 3.13.1 - 3.0.1 + 3.3.0 2.8.0 - 2.7 - 2.2.0 + 2.15.0 2.0 - 0.3.5 + 0.9.0.M3 8.10 1.2.6 - 3.7.0 + 3.8.0 3.3.1 3.6.0 3.12.1 @@ -125,6 +124,18 @@ import pom + + org.apache.maven.resolver + maven-resolver-supplier-mvn4 + 2.0.1 + + + org.slf4j + slf4j-bom + 2.0.16 + import + pom + org.jboss.shrinkwrap shrinkwrap-bom @@ -137,6 +148,11 @@ commons-codec ${version.commons-codec} + + com.google.inject + guice + ${version.com.google.guice} + commons-io commons-io