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