use of org.codehaus.plexus.DefaultContainerConfiguration in project kie-wb-common by kiegroup.
the class AFMavenCli method container.
protected PlexusContainer container(AFCliRequest cliRequest, ClassWorld classWorld) throws Exception {
if (cliRequest.getClassWorld() == null) {
/**
* The classworld is now Created in the NioMavenCompiler and in the InternalNioDefaultMaven compiler for this reasons:
* problem: https://stackoverflow.com/questions/22410706/error-when-execute-mavencli-in-the-loop-maven-embedder
* problem:https://stackoverflow.com/questions/40587683/invocation-of-mavencli-fails-within-a-maven-plugin
* solution:https://dev.eclipse.org/mhonarc/lists/sisu-users/msg00063.html
* original version:
* cliRequest.setClassWorld(new ClassWorld("plexus.core",Thread.currentThread().getContextClassLoader()));
*/
cliRequest.setClassWorld(classWorld);
}
ClassRealm coreRealm = cliRequest.getClassWorld().getClassRealm("plexus.core");
if (coreRealm == null) {
coreRealm = cliRequest.getClassWorld().getRealms().iterator().next();
}
List<File> extClassPath = parseExtClasspath(cliRequest);
CoreExtensionEntry coreEntry = CoreExtensionEntry.discoverFrom(coreRealm);
List<CoreExtensionEntry> extensions = loadCoreExtensions(cliRequest, coreRealm, coreEntry.getExportedArtifacts());
ClassRealm containerRealm = setupContainerRealm(cliRequest.getClassWorld(), coreRealm, extClassPath, extensions);
ContainerConfiguration cc = new DefaultContainerConfiguration().setClassWorld(cliRequest.getClassWorld()).setRealm(containerRealm).setClassPathScanning(PlexusConstants.SCANNING_INDEX).setAutoWiring(true).setName("maven");
Set<String> exportedArtifacts = new HashSet<String>(coreEntry.getExportedArtifacts());
Set<String> exportedPackages = new HashSet<String>(coreEntry.getExportedPackages());
for (CoreExtensionEntry extension : extensions) {
exportedArtifacts.addAll(extension.getExportedArtifacts());
exportedPackages.addAll(extension.getExportedPackages());
}
final CoreExports exports = new CoreExports(containerRealm, exportedArtifacts, exportedPackages);
DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() {
@Override
protected void configure() {
bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory);
bind(CoreExports.class).toInstance(exports);
}
});
// This is used to share informations at runtime between Maven plugins and our compiler
container.addComponent(cliRequest.getMap(), HashMap.class, "kieMap");
// NOTE: To avoid inconsistencies, we'll use the TCCL exclusively for lookups
container.setLookupRealm(null);
container.setLoggerManager(plexusLoggerManager);
for (CoreExtensionEntry extension : extensions) {
container.discoverComponents(extension.getClassRealm());
}
customizeContainer(container);
container.getLoggerManager().setThresholds(cliRequest.getRequest().getLoggingLevel());
Thread.currentThread().setContextClassLoader(container.getContainerRealm());
eventSpyDispatcher = container.lookup(EventSpyDispatcher.class);
DefaultEventSpyContext eventSpyContext = new DefaultEventSpyContext();
Map<String, Object> data = eventSpyContext.getData();
data.put("plexus", container);
data.put("workingDirectory", cliRequest.getWorkingDirectory());
data.put("systemProperties", cliRequest.getSystemProperties());
data.put("userProperties", cliRequest.getUserProperties());
data.put("versionProperties", AFCLIReportingUtils.getBuildProperties());
eventSpyDispatcher.init(eventSpyContext);
slf4jLogger = slf4jLoggerFactory.getLogger(this.getClass().getName());
maven = container.lookup(Maven.class);
executionRequestPopulator = container.lookup(MavenExecutionRequestPopulator.class);
modelProcessor = createModelProcessor(container);
configurationProcessors = container.lookupMap(AFConfigurationProcessor.class);
toolchainsBuilder = container.lookup(ToolchainsBuilder.class);
dispatcher = (DefaultSecDispatcher) container.lookup(SecDispatcher.class, "maven");
return container;
}
use of org.codehaus.plexus.DefaultContainerConfiguration in project kie-wb-common by kiegroup.
the class ReusableAFMavenCli method loadCoreExtensions.
protected List<CoreExtensionEntry> loadCoreExtensions(AFCliRequest cliRequest, ClassRealm containerRealm, Set<String> providedArtifacts) {
if (cliRequest.getMultiModuleProjectDirectory() == null) {
return Collections.emptyList();
}
Path extensionsFile = Paths.get(cliRequest.getMultiModuleProjectDirectory().toString(), EXTENSIONS_FILENAME);
if (!java.nio.file.Files.isRegularFile(extensionsFile)) {
return Collections.emptyList();
}
try {
List<CoreExtension> extensions = readCoreExtensionsDescriptor(extensionsFile);
if (extensions.isEmpty()) {
return Collections.emptyList();
}
ContainerConfiguration cc = //
new DefaultContainerConfiguration().setClassWorld(//
cliRequest.getClassWorld()).setRealm(//
containerRealm).setClassPathScanning(//
PlexusConstants.SCANNING_INDEX).setAutoWiring(//
true).setName("maven");
if (reusableContainerCoreExtensions == null) {
reusableContainerCoreExtensions = new DefaultPlexusContainer(cc, new AbstractModule() {
@Override
protected void configure() {
bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory);
}
});
}
try {
reusableContainerCoreExtensions.setLookupRealm(null);
((DefaultPlexusContainer) reusableContainerCoreExtensions).setLoggerManager(plexusLoggerManager);
((DefaultPlexusContainer) reusableContainerCoreExtensions).getLoggerManager().setThresholds(cliRequest.getRequest().getLoggingLevel());
Thread.currentThread().setContextClassLoader(reusableContainerCoreExtensions.getContainerRealm());
reusableExecutionRequestPopulator = reusableContainerCoreExtensions.lookup(MavenExecutionRequestPopulator.class);
reusableConfigurationProcessors = reusableContainerCoreExtensions.lookupMap(AFConfigurationProcessor.class);
configure(cliRequest);
MavenExecutionRequest request = DefaultMavenExecutionRequest.copy(cliRequest.getRequest());
request = populateRequest(cliRequest, request);
request = reusableExecutionRequestPopulator.populateDefaults(request);
BootstrapCoreExtensionManager resolver = reusableContainerCoreExtensions.lookup(BootstrapCoreExtensionManager.class);
reusableExtensions = resolver.loadCoreExtensions(request, providedArtifacts, extensions);
return reusableExtensions;
} finally {
reusableExecutionRequestPopulator = null;
}
} catch (RuntimeException e) {
// runtime exceptions are most likely bugs in maven, let them bubble up to the user
throw e;
} catch (Exception e) {
reusableSlf4jLogger.warn("Failed to read extensions descriptor " + extensionsFile + ": " + e.getMessage());
}
return Collections.emptyList();
}
use of org.codehaus.plexus.DefaultContainerConfiguration in project gradle by gradle.
the class MavenProjectsCreator method createNow.
private Set<MavenProject> createNow(Settings settings, File pomFile) throws PlexusContainerException, ComponentLookupException, MavenExecutionRequestPopulationException, ProjectBuildingException {
ContainerConfiguration containerConfiguration = new DefaultContainerConfiguration().setClassWorld(new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader())).setName("mavenCore").setClassPathScanning(PlexusConstants.SCANNING_INDEX).setAutoWiring(true);
DefaultPlexusContainer container = new DefaultPlexusContainer(containerConfiguration);
ProjectBuilder builder = container.lookup(ProjectBuilder.class);
MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
final Properties properties = SystemProperties.getInstance().withSystemProperties(() -> {
final Properties currentProperties = new Properties();
currentProperties.putAll(System.getProperties());
return currentProperties;
});
executionRequest.setSystemProperties(properties);
MavenExecutionRequestPopulator populator = container.lookup(MavenExecutionRequestPopulator.class);
populateFromSettings(settings, executionRequest, populator);
populator.populateDefaults(executionRequest);
ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
buildingRequest.getRemoteRepositories().forEach(repository -> {
if (repository.getId().equals(RepositorySystem.DEFAULT_REMOTE_REPO_ID)) {
repository.setUrl(RepositoryHandler.MAVEN_CENTRAL_URL);
}
});
buildingRequest.setProcessPlugins(false);
MavenProject mavenProject = builder.build(pomFile, buildingRequest).getProject();
Set<MavenProject> reactorProjects = new LinkedHashSet<>();
// TODO adding the parent project first because the converter needs it this way ATM. This is oversimplified.
// the converter should not depend on the order of reactor projects.
// we should add coverage for nested multi-project builds with multiple parents.
reactorProjects.add(mavenProject);
List<ProjectBuildingResult> allProjects = builder.build(ImmutableList.of(pomFile), true, buildingRequest);
// noinspection NullableProblems
CollectionUtils.collect(allProjects, reactorProjects, ProjectBuildingResult::getProject);
MavenExecutionResult result = new DefaultMavenExecutionResult();
result.setProject(mavenProject);
RepositorySystemSession repoSession = new DefaultRepositorySystemSession();
@SuppressWarnings("deprecation") MavenSession session = new MavenSession(container, repoSession, executionRequest, result);
session.setCurrentProject(mavenProject);
return reactorProjects;
}
use of org.codehaus.plexus.DefaultContainerConfiguration in project spring-cloud-function by spring-cloud.
the class DependencyResolutionModule method initialize.
private void initialize() {
if (this.container == null) {
synchronized (lock) {
if (this.container == null) {
ClassWorld classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
ContainerConfiguration config = new DefaultContainerConfiguration().setClassWorld(classWorld).setRealm(classWorld.getClassRealm("plexus.core")).setClassPathScanning(PlexusConstants.SCANNING_INDEX).setAutoWiring(true).setName("maven");
PlexusContainer container;
try {
container = new DefaultPlexusContainer(config, new AetherModule(), new DependencyResolutionModule());
localRepositoryManagerFactory = container.lookup(LocalRepositoryManagerFactory.class);
container.addComponent(new ClassRealmManager((MutablePlexusContainer) container, new DefaultBeanLocator()), ClassRealmManager.class.getName());
projectBuilder = container.lookup(ProjectBuilder.class);
repositorySystem = container.lookup(RepositorySystem.class);
} catch (Exception e) {
throw new IllegalStateException("Cannot create container", e);
}
this.container = container;
this.settings = new MavenSettingsReader().readSettings();
}
}
}
}
use of org.codehaus.plexus.DefaultContainerConfiguration in project sts4 by spring-projects.
the class MavenBridge method newPlexusContainer.
private static DefaultPlexusContainer newPlexusContainer() throws PlexusContainerException {
final ClassWorld classWorld = new ClassWorld(MAVEN_CORE_REALM_ID, ClassWorld.class.getClassLoader());
final ClassRealm realm;
try {
realm = classWorld.getRealm(MAVEN_CORE_REALM_ID);
} catch (NoSuchRealmException e) {
throw new PlexusContainerException("Could not lookup required class realm", e);
}
final ContainerConfiguration mavenCoreCC = //
new DefaultContainerConfiguration().setClassWorld(//
classWorld).setRealm(//
realm).setClassPathScanning(//
PlexusConstants.SCANNING_INDEX).setAutoWiring(//
true).setName(// $NON-NLS-1$
"mavenCore");
final Module logginModule = new AbstractModule() {
protected void configure() {
bind(ILoggerFactory.class).toInstance(LoggerFactory.getILoggerFactory());
}
};
final Module coreExportsModule = new AbstractModule() {
protected void configure() {
ClassRealm realm = mavenCoreCC.getRealm();
CoreExtensionEntry entry = CoreExtensionEntry.discoverFrom(realm);
CoreExports exports = new CoreExports(entry);
bind(CoreExports.class).toInstance(exports);
}
};
return new DefaultPlexusContainer(mavenCoreCC, logginModule, coreExportsModule);
}
Aggregations