From c16665a086859b0c125127d350d023926784d3ab Mon Sep 17 00:00:00 2001 From: Jason van Zyl Date: Sat, 1 Sep 2007 23:21:29 +0000 Subject: [PATCH] o renaming to populator as I'm going to put a few more pieces that are currently instantiate but should be components like the profile manager. I will move this out of DefaultMaven and put it in the request to be shared in the session. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@571897 13f79535-47bb-0310-9956-ffa450edef68 --- ...DefaultMavenExecutionRequestPopulator.java | 221 ++++++++++++++++++ .../MavenExecutionRequestPopulator.java | 32 +++ 2 files changed, 253 insertions(+) create mode 100644 maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java create mode 100644 maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java new file mode 100644 index 0000000000..5068c7c04b --- /dev/null +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java @@ -0,0 +1,221 @@ +package org.apache.maven.embedder.execution; + +/* + * 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. + */ + +import org.apache.maven.SettingsConfigurationException; +import org.apache.maven.artifact.manager.WagonManager; +import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; +import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; +import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.embedder.MavenEmbedder; +import org.apache.maven.embedder.MavenEmbedderException; +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.monitor.event.DefaultEventMonitor; +import org.apache.maven.plugin.Mojo; +import org.apache.maven.settings.Mirror; +import org.apache.maven.settings.Proxy; +import org.apache.maven.settings.Server; +import org.apache.maven.settings.Settings; +import org.apache.maven.usability.SystemWarnings; +import org.apache.maven.wagon.repository.RepositoryPermissions; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusContainer; +import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.codehaus.plexus.context.Context; +import org.codehaus.plexus.context.ContextException; +import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; +import org.codehaus.plexus.util.xml.Xpp3Dom; + +import java.io.File; +import java.util.Iterator; + +/** + * DefaultMavenExecutionRequestPopulator + * + * @version $Id$ + */ +public class DefaultMavenExecutionRequestPopulator + extends AbstractLogEnabled + implements MavenExecutionRequestPopulator, Contextualizable +{ + private ArtifactRepositoryFactory artifactRepositoryFactory; + + private ArtifactRepositoryLayout defaultArtifactRepositoryLayout; + + private PlexusContainer container; + + private WagonManager wagonManager; + + public MavenExecutionRequest populateDefaults( MavenExecutionRequest request, + MavenEmbedder embedder ) + throws MavenEmbedderException + { + if ( request.getSettings() == null ) + { + request.setSettings( embedder.getSettings() ); + } + + if ( request.getLocalRepository() == null ) + { + request.setLocalRepository( embedder.getLocalRepository() ); + } + + // Repository update policies + + boolean snapshotPolicySet = false; + + if ( request.isOffline() ) + { + snapshotPolicySet = true; + } + + if ( !snapshotPolicySet ) + { + if ( request.isUpdateSnapshots() ) + { + artifactRepositoryFactory.setGlobalUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS ); + } + else if ( request.isNoSnapshotUpdates() ) + { + getLogger().info( "+ Supressing SNAPSHOT updates." ); + artifactRepositoryFactory.setGlobalUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_NEVER ); + } + } + + artifactRepositoryFactory.setGlobalChecksumPolicy( request.getGlobalChecksumPolicy() ); + + // Wagon + + if ( request.isOffline() ) + { + getLogger().info( SystemWarnings.getOfflineWarning() ); + + wagonManager.setOnline( false ); + } + else + { + wagonManager.findAndRegisterWagons( container ); + + wagonManager.setInteractive( request.isInteractiveMode() ); + + wagonManager.setDownloadMonitor( request.getTransferListener() ); + + wagonManager.setOnline( true ); + } + + try + { + resolveParameters( request.getSettings() ); + } + catch ( Exception e ) + { + throw new MavenEmbedderException( "Unable to configure Maven for execution", e ); + } + + // BaseDirectory in MavenExecutionRequest + + if ( request.getPomFile() != null && request.getBaseDirectory() == null ) + { + request.setBaseDirectory( new File( request.getPomFile() ) ); + } + + // EventMonitor/Logger + + Logger logger = container.getLoggerManager().getLoggerForComponent( Mojo.ROLE ); + + if ( request.getEventMonitors() == null ) + { + request.addEventMonitor( new DefaultEventMonitor( logger ) ); + } + + container.getLoggerManager().setThreshold( request.getLoggingLevel() ); + + return request; + } + + private void resolveParameters( Settings settings ) + throws ComponentLookupException, ComponentLifecycleException, SettingsConfigurationException + { + WagonManager wagonManager = (WagonManager) container.lookup( WagonManager.ROLE ); + + try + { + Proxy proxy = settings.getActiveProxy(); + + if ( proxy != null ) + { + if ( proxy.getHost() == null ) + { + throw new SettingsConfigurationException( "Proxy in settings.xml has no host" ); + } + + wagonManager.addProxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(), proxy.getUsername(), + proxy.getPassword(), proxy.getNonProxyHosts() ); + } + + for ( Iterator i = settings.getServers().iterator(); i.hasNext(); ) + { + Server server = (Server) i.next(); + + wagonManager.addAuthenticationInfo( server.getId(), server.getUsername(), server.getPassword(), + server.getPrivateKey(), server.getPassphrase() ); + + wagonManager.addPermissionInfo( server.getId(), server.getFilePermissions(), server.getDirectoryPermissions() ); + + if ( server.getConfiguration() != null ) + { + wagonManager.addConfiguration( server.getId(), (Xpp3Dom) server.getConfiguration() ); + } + } + + RepositoryPermissions defaultPermissions = new RepositoryPermissions(); + + defaultPermissions.setDirectoryMode( "775" ); + + defaultPermissions.setFileMode( "664" ); + + wagonManager.setDefaultRepositoryPermissions( defaultPermissions ); + + for ( Iterator i = settings.getMirrors().iterator(); i.hasNext(); ) + { + Mirror mirror = (Mirror) i.next(); + + wagonManager.addMirror( mirror.getId(), mirror.getMirrorOf(), mirror.getUrl() ); + } + } + finally + { + container.release( wagonManager ); + } + } + + // ---------------------------------------------------------------------------- + // LegacyLifecycle + // ---------------------------------------------------------------------------- + + public void contextualize( Context context ) + throws ContextException + { + container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); + } +} diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java new file mode 100644 index 0000000000..73c5235662 --- /dev/null +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java @@ -0,0 +1,32 @@ +package org.apache.maven.embedder.execution; + +/* + * 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. + */ + +import org.apache.maven.embedder.MavenEmbedder; +import org.apache.maven.embedder.MavenEmbedderException; +import org.apache.maven.execution.MavenExecutionRequest; + +public interface MavenExecutionRequestPopulator +{ + String ROLE = MavenExecutionRequestPopulator.class.getName(); + + MavenExecutionRequest populateDefaults( MavenExecutionRequest request, MavenEmbedder embedder ) + throws MavenEmbedderException; +}