brett 2004/11/04 07:09:59
Modified: src/java/org/apache/maven/plugin Tag: MAVEN-1_0-BRANCH
PluginManager.java
xdocs Tag: MAVEN-1_0-BRANCH changes.xml
Log:
PR: MAVEN-1427
make sure only one plugin per artifact ID is installed at a time with plugin
dependencies
Revision Changes Path
No revision
No revision
1.70.4.55 +77 -33 maven/src/java/org/apache/maven/plugin/PluginManager.java
Index: PluginManager.java
===================================================================
RCS file: /home/cvs/maven/src/java/org/apache/maven/plugin/PluginManager.java,v
retrieving revision 1.70.4.54
retrieving revision 1.70.4.55
diff -u -r1.70.4.54 -r1.70.4.55
--- PluginManager.java 24 Sep 2004 10:38:43 -0000 1.70.4.54
+++ PluginManager.java 4 Nov 2004 15:09:58 -0000 1.70.4.55
@@ -24,7 +24,6 @@
import com.werken.werkz.Session;
import com.werken.werkz.WerkzProject;
import com.werken.werkz.jelly.JellySession;
-
import org.apache.commons.io.FileUtils;
import org.apache.commons.jelly.Script;
import org.apache.commons.jelly.expression.Expression;
@@ -147,6 +146,7 @@
/** The current goal attainment base context. */
private MavenJellyContext baseContext;
+ private static final String PLUGIN_TEMP_MAP = "PluginManager.PLUGIN_TEMP_MAP";
/**
* Default constructor.
@@ -657,6 +657,7 @@
{
cleanupAttainGoal( pluginSet );
delayedPops = oldDelayedPops;
+ reinstallPlugins( project.getContext() );
project.popContext();
baseContext = prevBaseContext;
}
@@ -673,6 +674,8 @@
{
JellyScriptHousing housing = ( JellyScriptHousing ) j.next();
+ reinstallPlugins( housing.getProject().getContext() );
+
housing.getProject().popContext();
}
delayedPops.clear();
@@ -804,23 +807,13 @@
}
/**
- */
- public void installPlugin( File file, Project parentProject ) throws
MavenException
- {
- // By default, don't copy to the unpacked plugins directory - only use this
dependency for this project
- installPlugin( file, parentProject, false );
- // TODO: we should unload the plugin after the project is done in this
case - we really need
- // to define the lifecycle of plugins
- }
-
- /**
* Load and install a plugin.
*
* @param file the file to install. Must be a plugin jar
* @param parentProject the project to load the installed plugin into
* @todo remove any old one
*/
- public void installPlugin( File file, Project parentProject, boolean cache )
+ public void installPlugin( File file, Project parentProject )
throws MavenException
{
log.debug( "Using plugin file: " + file );
@@ -829,38 +822,89 @@
String pluginName = file.getCanonicalFile().getName();
pluginName = pluginName.substring( 0, pluginName.indexOf( ".jar" ) );
- if ( !isLoaded( pluginName ) )
- {
- // expand it
- File unpackedPluginDir = unpackPlugin( pluginName, file );
- if ( unpackedPluginDir != null )
+ if ( isLoaded( pluginName ) )
+ {
+ // already installed this version
+ return;
+ }
+
+ // expand it
+ File unpackedPluginDir = unpackPlugin( pluginName, file );
+ if ( unpackedPluginDir != null )
+ {
+ JellyScriptHousing housing = createLazyPluginHousing(
unpackedPluginDir );
+ if ( housing != null )
{
- JellyScriptHousing housing = createPluginHousing(
unpackedPluginDir );
- if ( housing == null )
+ String artifactId = housing.getProject().getArtifactId();
+ if ( artifactIdToHousingMap.containsKey( artifactId ) )
{
- throw new MavenException( "Not a valid plugin file: " +
file );
+ // old version
+ JellyScriptHousing oldHousing = (JellyScriptHousing)
artifactIdToHousingMap.get( artifactId );
+ log.debug( "Temporarily uninstalling: " + oldHousing );
+ addPluginToReinstall( parentProject.getContext(),
artifactId, oldHousing );
+ pluginHousings.remove( oldHousing.getName() );
+ mapper.invalidatePlugin( oldHousing );
+ transientMapper.invalidatePlugin( oldHousing );
}
- // By default, not caching the plugin - its a per execution
installation
- housing.parse( transientMapper );
- // Should only be putting in the transientMapper - but it is
not consistent with isLoaded
- housing.parse( mapper );
- if ( cache )
- {
- cacheManager.registerPlugin( pluginName, housing );
- housing.parse( cacheManager );
- cacheManager.saveCache( unpackedPluginsDir );
- }
+ mapArtifactIdToPluginHousing( artifactId, housing );
}
- else
+ else
{
- throw new MavenException( "Not a valid JAR file: " + file );
+ throw new MavenException( "Not a valid plugin file: " + file );
}
+
+ log.debug( "Installing plugin: " + housing );
+ // By default, not caching the plugin - its a per execution
installation
+ housing.parse( transientMapper );
+ // Should only be putting in the transientMapper - but it is not
consistent with isLoaded
+ housing.parse( mapper );
+ }
+ else
+ {
+ throw new MavenException( "Not a valid JAR file: " + file );
}
}
catch ( IOException e )
{
throw new MavenException( "Error installing plugin", e );
+ }
+ }
+
+ /**
+ * @todo can this be removed and simplified if transient mapper contains the
plugin mapping only?
+ */
+ private void addPluginToReinstall( MavenJellyContext context, String
artifactId, JellyScriptHousing housing )
+ {
+ Map m = (Map) context.getVariables().get( PLUGIN_TEMP_MAP );
+ if ( m == null )
+ {
+ m = new HashMap();
+ context.setVariable( PLUGIN_TEMP_MAP, m );
+ }
+ m.put( artifactId, housing );
+ }
+
+ /**
+ * @todo can this be removed and simplified if transient mapper contains the
plugin mapping only?
+ */
+ private void reinstallPlugins( MavenJellyContext context ) throws MavenException
+ {
+ Map m = (Map) context.getVariables().get( PLUGIN_TEMP_MAP );
+ if ( m != null )
+ {
+ for ( Iterator i = m.keySet().iterator(); i.hasNext(); )
+ {
+ String artifactId = (String) i.next();
+ JellyScriptHousing housing = (JellyScriptHousing) m.get( artifactId
);
+ pluginHousings.remove( housing.getName() );
+ mapper.invalidatePlugin( housing );
+ transientMapper.invalidatePlugin( housing );
+ housing = (JellyScriptHousing) m.get( artifactId );
+ log.debug( "Reinstalling: " + housing );
+ housing.parse( transientMapper );
+ housing.parse( mapper );
+ }
}
}
No revision
No revision
1.14.4.47 +2 -0 maven/xdocs/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/maven/xdocs/changes.xml,v
retrieving revision 1.14.4.46
retrieving revision 1.14.4.47
diff -u -r1.14.4.46 -r1.14.4.47
--- changes.xml 4 Nov 2004 11:08:56 -0000 1.14.4.46
+++ changes.xml 4 Nov 2004 15:09:59 -0000 1.14.4.47
@@ -25,6 +25,8 @@
</properties>
<body>
<release version="1.0.1-SNAPSHOT" date="in CVS MAVEN-1_0-BRANCH">
+ <action dev="brett" type="fix" issue="MAVEN-1427">Improve plugin dependency
handling by removing old plugins before using a different version</action>
+ <action dev="brett" type="fix" issue="MAVEN-1422" due-to="Eric Lapierre">Fix
inheritence inside the reactor over multiple levels</action>
<action dev="brett" type="fix" issue="MAVEN-1405" due-to="Philipp Kohl">Use
preemptive authentication when there are some credentials, so the first 403 is really
forbidden.</action>
<action dev="brett" type="fix" issue="MAVEN-1457">Don't display the password
on the console when a remote repository uses basic authentication.</action>
<action dev="brett" type="fix" issue="MAVEN-1471">Prevent
NullPointerException in a case that has been encountered, and display a warning
instead.</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]