Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@

<jboss.releases.repo.url>https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/</jboss.releases.repo.url>
<jboss.snapshots.repo.url>https://repository.jboss.org/nexus/content/repositories/snapshots/</jboss.snapshots.repo.url>
<version.org.apache.maven>3.9.8</version.org.apache.maven>
<version.org.apache.maven>4.0.0-beta-4</version.org.apache.maven>

</properties>

Expand Down
9 changes: 5 additions & 4 deletions maven/impl-maven-archive/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,17 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-classworlds</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${version.com.google.guice}</version>
</dependency>


<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -52,21 +57,46 @@ public abstract class AbstractCompilingProcessor<ARCHIVETYPE extends Archive<ARC

// this pattern is used to check whether archive name was autogenerated
private static final Pattern UUID4_PATTERN = Pattern.compile("[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}\\.[a-z]+");
private final JavacCompiler compiler;

protected MavenWorkingSession session;

public AbstractCompilingProcessor() {
if (Boolean.getBoolean("org.jboss.shrinkwrap.resolver.maven.skipCompilation")) {
log.fine("Compilation was skipped due to system property org.jboss.shrinkwrap.resolver.maven.importer.skipCompilation being set to true");
compiler = new JavacCompiler() {
@Override
public String getCompilerId() {
return "";
}

@Override
public CompilerResult performCompile(CompilerConfiguration configuration) throws CompilerException {
return new CompilerResult();
}
};
} else {
compiler = Guice.createInjector(new WireModule(
new SpaceModule(new URLClassSpace(AbstractCompilingProcessor.class.getClassLoader()),
LOCAL_INDEX, true))).getInstance(JavacCompiler.class);
}
}

protected PackagingProcessor<ARCHIVETYPE> configure(MavenWorkingSession session) {
this.session = session;
return this;
}

protected AbstractCompilingProcessor<ARCHIVETYPE> 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)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand All @@ -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"));
Expand All @@ -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"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());



Expand Down
16 changes: 7 additions & 9 deletions maven/impl-maven/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,26 +67,22 @@
<artifactId>plexus-classworlds</artifactId>
<version>${version.org.codehaus.plexus-classworlds}</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>${version.org.codehaus.plexus-component-annotations}</version>
</dependency>
<dependency>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.plexus</artifactId>
<version>${version.org.eclipse.plexus}</version> <!-- Note: older version imported from Maven parent, but use latest -->
<exclusions>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-classworlds</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.inject</artifactId>
<version>${version.org.eclipse.plexus}</version>
</dependency>
<!-- Sisu Inject/Plexus leaves to user to "bring in" Guice: runtime needed only -->
<dependency>
<groupId>com.google.inject</groupId>
Expand All @@ -101,6 +97,7 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>failureaccess</artifactId>
<version>1.0.2</version>
</dependency>

<!-- org.apache.maven -->
Expand Down Expand Up @@ -157,6 +154,7 @@
<dependency>
<groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-transport-http</artifactId>
<version>1.9.22</version>
</dependency>

<!-- org.codehaus.plexus -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -188,6 +197,76 @@ public MavenWorkingSession loadPomFromFile(File pomFile, Properties userProperti
return this;
}

private Collection<ArtifactResult> resolveProjectLocal(final List<MavenDependency> depsForResolution,
Set<MavenDependency> additionalDependencies) {
Collection<ArtifactResult> 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<String> classifier, Optional<String> extension,
Set<MavenDependency> additionalDependencies) {
Path findProjectLocalRepository = findProjectLocalRepository();
if (findProjectLocalRepository == null) {
return null;
}

Predicate<String> 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<MavenDependency> filterFromLocal(final List<MavenDependency> depsForResolution,
final Collection<ArtifactResult> 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<MavenResolvedArtifact> resolveDependencies(final MavenResolutionStrategy strategy)
throws ResolutionException {
Expand All @@ -198,7 +277,12 @@ public Collection<MavenResolvedArtifact> resolveDependencies(final MavenResoluti

final List<RemoteRepository> repos = this.getRemoteRepositories();

final CollectRequest request = new CollectRequest(MavenConverter.asDependencies(depsForResolution,
Set<MavenDependency> allDependencies = new LinkedHashSet<>(depsForResolution);
Collection<ArtifactResult> projectLocalDependencies = resolveProjectLocal(depsForResolution, allDependencies);
List<MavenDependency> unresolvedLocally = filterFromLocal(
allDependencies.stream().collect(Collectors.toList()), projectLocalDependencies);

final CollectRequest request = new CollectRequest(MavenConverter.asDependencies(unresolvedLocally,
getSession().getArtifactTypeRegistry()),
MavenConverter.asDependencies(depManagement, getSession().getArtifactTypeRegistry()), repos);

Expand Down Expand Up @@ -231,7 +315,11 @@ public Collection<MavenResolvedArtifact> resolveDependencies(final MavenResoluti
throw wrapException(e);
}

final Collection<MavenResolvedArtifact> resolvedArtifacts = new ArrayList<>(results.size());
final Collection<MavenResolvedArtifact> 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));
Expand Down
Loading