mirror of https://github.com/apache/maven.git
Moved out specialized methods from PomClassicTransformer to ProjectBuilder. Did this refactoring to make it easier to merge PomTransformer and PomClassicTransfomer.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@719724 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
dc699a5296
commit
7368eb1216
|
@ -59,8 +59,8 @@ import org.apache.maven.project.DuplicateArtifactAttachmentException;
|
|||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.MavenProjectBuilder;
|
||||
import org.apache.maven.project.ProjectBuildingException;
|
||||
import org.apache.maven.project.builder.PomClassicTransformer;
|
||||
import org.apache.maven.project.builder.PomInterpolatorTag;
|
||||
import org.apache.maven.project.builder.ProjectBuilder;
|
||||
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
|
||||
import org.apache.maven.project.artifact.MavenMetadataSource;
|
||||
import org.apache.maven.realm.MavenRealmManager;
|
||||
|
@ -563,7 +563,7 @@ public class DefaultPluginManager
|
|||
interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( session.getProjectBuilderConfiguration().getUserProperties(),
|
||||
PomInterpolatorTag.USER_PROPERTIES.name()));
|
||||
String interpolatedDom =
|
||||
PomClassicTransformer.interpolateXmlString( String.valueOf( dom ), interpolatorProperties );
|
||||
ProjectBuilder.Interpolator.interpolateXmlString( String.valueOf( dom ), interpolatorProperties );
|
||||
dom = Xpp3DomBuilder.build( new StringReader( interpolatedDom ) );
|
||||
}
|
||||
catch ( XmlPullParserException e )
|
||||
|
|
|
@ -6,28 +6,205 @@
|
|||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="maven-shared-model" />
|
||||
<orderEntry type="module" module-name="maven-project-builder" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<library name="junit:junit:4.4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-external/1.0.0-alpha-2-SNAPSHOT/mercury-external-1.0.0-alpha-2-SNAPSHOT.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.apache.maven.mercury:mercury-artifact:1.0.0-alpha-2-SNAPSHOT">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-artifact/1.0.0-alpha-2-SNAPSHOT/mercury-artifact-1.0.0-alpha-2-SNAPSHOT.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-artifact/1.0.0-alpha-2-SNAPSHOT/mercury-artifact-1.0.0-alpha-2-SNAPSHOT-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-artifact/1.0.0-alpha-2-SNAPSHOT/mercury-artifact-1.0.0-alpha-2-SNAPSHOT-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.plexus:plexus-container-default:1.0-beta-2-SNAPSHOT">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-container-default/1.0-beta-2-SNAPSHOT/plexus-container-default-1.0-beta-2-SNAPSHOT.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-container-default/1.0-beta-2-SNAPSHOT/plexus-container-default-1.0-beta-2-SNAPSHOT-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-container-default/1.0-beta-2-SNAPSHOT/plexus-container-default-1.0-beta-2-SNAPSHOT-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.plexus:plexus-utils:1.5.5">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-utils/1.5.5/plexus-utils-1.5.5.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-utils/1.5.5/plexus-utils-1.5.5-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-utils/1.5.5/plexus-utils-1.5.5-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.plexus:plexus-classworlds:1.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-classworlds/1.2/plexus-classworlds-1.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-classworlds/1.2/plexus-classworlds-1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-classworlds/1.2/plexus-classworlds-1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.apache.xbean:xbean-reflect:3.4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="log4j:log4j:1.2.12">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/log4j/log4j/1.2.12/log4j-1.2.12.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/log4j/log4j/1.2.12/log4j-1.2.12-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/log4j/log4j/1.2.12/log4j-1.2.12-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="commons-logging:commons-logging-api:1.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="com.google.code.google-collections:google-collect:snapshot-20080530">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.plexus:plexus-lang:1.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-lang/1.0/plexus-lang-1.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-lang/1.0/plexus-lang-1.0-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-lang/1.0/plexus-lang-1.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.plexus:plexus-component-api:1.0-alpha-20">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-component-api/1.0-alpha-20/plexus-component-api-1.0-alpha-20.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-component-api/1.0-alpha-20/plexus-component-api-1.0-alpha-20-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-component-api/1.0-alpha-20/plexus-component-api-1.0-alpha-20-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.apache.maven.mercury:mercury-external:1.0.0-alpha-2-SNAPSHOT">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-external/1.0.0-alpha-2-SNAPSHOT/mercury-external-1.0.0-alpha-2-SNAPSHOT.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-external/1.0.0-alpha-2-SNAPSHOT/mercury-external-1.0.0-alpha-2-SNAPSHOT-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/mercury/mercury-external/1.0.0-alpha-2-SNAPSHOT/mercury-external-1.0.0-alpha-2-SNAPSHOT-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module" module-name="maven-project-builder" exported="" />
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.apache.maven.shared:maven-shared-model:1.0-SNAPSHOT">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-shared-model/1.0-SNAPSHOT/maven-shared-model-1.0-SNAPSHOT.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-shared-model/1.0-SNAPSHOT/maven-shared-model-1.0-SNAPSHOT-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-shared-model/1.0-SNAPSHOT/maven-shared-model-1.0-SNAPSHOT-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="org.codehaus.woodstox:wstx-asl:3.2.6">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/wstx-asl/3.2.6/wstx-asl-3.2.6.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/wstx-asl/3.2.6/wstx-asl-3.2.6-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/wstx-asl/3.2.6/wstx-asl-3.2.6-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library" exported="">
|
||||
<library name="stax:stax-api:1.0.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/stax/stax-api/1.0.1/stax-api-1.0.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
</component>
|
||||
|
|
|
@ -264,7 +264,7 @@ public class DefaultMavenProjectBuilder
|
|||
|
||||
try
|
||||
{
|
||||
superModel = PomClassicTransformer.interpolateModel(superModel, interpolatorProperties, basedir);
|
||||
superModel = ProjectBuilder.Interpolator.interpolateModel(superModel, interpolatorProperties, basedir);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
|
|
|
@ -20,15 +20,12 @@ package org.apache.maven.project.builder;
|
|||
*/
|
||||
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.shared.model.*;
|
||||
import org.apache.maven.shared.model.impl.DefaultModelDataSource;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.File;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
|
@ -38,68 +35,6 @@ public final class PomClassicTransformer
|
|||
implements ModelTransformer
|
||||
{
|
||||
|
||||
/**
|
||||
* The URIs this tranformer supports
|
||||
*/
|
||||
private static Set<String> uris = new HashSet<String>( Arrays.asList( ProjectUri.Build.Extensions.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.configuration,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.Build.Plugins.xUri,
|
||||
ProjectUri.Build.Plugins.Plugin.configuration,
|
||||
ProjectUri.Reporting.Plugins.xUri,
|
||||
ProjectUri.Reporting.Plugins.Plugin.configuration,
|
||||
ProjectUri.Build.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Build.Resources.xUri,
|
||||
ProjectUri.Build.Resources.Resource.includes,
|
||||
ProjectUri.Build.Resources.Resource.excludes,
|
||||
ProjectUri.Build.TestResources.xUri,
|
||||
|
||||
ProjectUri.CiManagement.Notifiers.xUri,
|
||||
|
||||
ProjectUri.Contributors.xUri,
|
||||
|
||||
ProjectUri.Dependencies.xUri,
|
||||
ProjectUri.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.DependencyManagement.Dependencies.xUri,
|
||||
ProjectUri.DependencyManagement.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.Developers.xUri,
|
||||
ProjectUri.Developers.Developer.roles,
|
||||
ProjectUri.Licenses.xUri,
|
||||
ProjectUri.MailingLists.xUri,
|
||||
ProjectUri.Modules.xUri,
|
||||
ProjectUri.PluginRepositories.xUri,
|
||||
|
||||
ProjectUri.Profiles.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Plugins.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Plugins.Plugin.Executions.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Resources.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.TestResources.xUri,
|
||||
ProjectUri.Profiles.Profile.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.Dependencies.Dependency.Exclusions.xUri,
|
||||
ProjectUri.Profiles.Profile.DependencyManagement.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.DependencyManagement.Dependencies.Dependency.Exclusions.xUri,
|
||||
ProjectUri.Profiles.Profile.PluginRepositories.xUri,
|
||||
ProjectUri.Profiles.Profile.Reporting.Plugins.xUri,
|
||||
ProjectUri.Profiles.Profile.Reporting.Plugins.Plugin.ReportSets.xUri,
|
||||
ProjectUri.Profiles.Profile.Repositories.xUri,
|
||||
|
||||
ProjectUri.Profiles.Profile.Build.PluginManagement.Plugins.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.PluginManagement.Plugins.Plugin.Executions.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.PluginManagement.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.PluginManagement.Plugins.Plugin.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.Reporting.Plugins.xUri,
|
||||
ProjectUri.Reporting.Plugins.Plugin.ReportSets.xUri,
|
||||
|
||||
ProjectUri.Repositories.xUri
|
||||
) );
|
||||
|
||||
private static Map<String, List<ModelProperty>> cache = new HashMap<String, List<ModelProperty>>();
|
||||
|
||||
/**
|
||||
|
@ -285,7 +220,7 @@ public final class PomClassicTransformer
|
|||
}
|
||||
|
||||
List<ModelProperty> tmp = ModelMarshaller.marshallXmlToModelProperties(
|
||||
( (PomClassicDomainModel) domainModel ).getInputStream(), ProjectUri.baseUri, uris );
|
||||
( (PomClassicDomainModel) domainModel ).getInputStream(), ProjectUri.baseUri, PomTransformer.URIS );
|
||||
|
||||
List clearedProperties = new ArrayList<ModelProperty>();
|
||||
|
||||
|
@ -521,205 +456,7 @@ public final class PomClassicTransformer
|
|||
DomainModel domainModel)
|
||||
throws IOException
|
||||
{
|
||||
interpolateModelProperties( modelProperties, interpolatorProperties, (PomClassicDomainModel) domainModel);
|
||||
}
|
||||
|
||||
public static String interpolateXmlString( String xml, List<InterpolatorProperty> interpolatorProperties )
|
||||
throws IOException
|
||||
{
|
||||
List<ModelProperty> modelProperties =
|
||||
ModelMarshaller.marshallXmlToModelProperties( new ByteArrayInputStream(xml.getBytes()), ProjectUri.baseUri, uris );
|
||||
|
||||
Map<String, String> aliases = new HashMap<String, String>();
|
||||
aliases.put( "project.", "pom.");
|
||||
|
||||
List<InterpolatorProperty> ips = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips.addAll(ModelTransformerContext.createInterpolatorProperties(modelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue() != null )
|
||||
{
|
||||
String uri = mp.getUri();
|
||||
ips.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
|
||||
uri.length() ) + "}", mp.getValue() ) );
|
||||
}
|
||||
}
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips );
|
||||
return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
|
||||
}
|
||||
|
||||
public static String interpolateModelAsString(Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory)
|
||||
throws IOException
|
||||
{
|
||||
PomClassicDomainModel domainModel = new PomClassicDomainModel( model );
|
||||
domainModel.setProjectDirectory( projectDirectory );
|
||||
List<ModelProperty> modelProperties =
|
||||
ModelMarshaller.marshallXmlToModelProperties( domainModel.getInputStream(), ProjectUri.baseUri, uris );
|
||||
interpolateModelProperties( modelProperties, interpolatorProperties, domainModel);
|
||||
|
||||
return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
|
||||
}
|
||||
|
||||
public static Model interpolateModel(Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory)
|
||||
throws IOException
|
||||
{
|
||||
String pomXml = interpolateModelAsString( model, interpolatorProperties, projectDirectory );
|
||||
PomClassicDomainModel domainModel = new PomClassicDomainModel( new ByteArrayInputStream( pomXml.getBytes() ));
|
||||
return domainModel.getModel();
|
||||
}
|
||||
|
||||
private static boolean containsProjectVersion( List<InterpolatorProperty> interpolatorProperties )
|
||||
{
|
||||
InterpolatorProperty versionInterpolatorProperty =
|
||||
new ModelProperty( ProjectUri.version, "").asInterpolatorProperty( ProjectUri.baseUri);
|
||||
for( InterpolatorProperty ip : interpolatorProperties)
|
||||
{
|
||||
if ( ip.equals( versionInterpolatorProperty ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final Map<String, String> aliases = new HashMap<String, String>();
|
||||
|
||||
private static void addProjectAlias( String element, boolean leaf )
|
||||
{
|
||||
String suffix = leaf ? "\\}" : "\\.";
|
||||
aliases.put( "\\$\\{project\\." + element + suffix, "\\$\\{" + element + suffix );
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
aliases.put( "\\$\\{project\\.", "\\$\\{pom\\.");
|
||||
addProjectAlias( "modelVersion", true );
|
||||
addProjectAlias( "groupId", true );
|
||||
addProjectAlias( "artifactId", true );
|
||||
addProjectAlias( "version", true );
|
||||
addProjectAlias( "packaging", true );
|
||||
addProjectAlias( "name", true );
|
||||
addProjectAlias( "description", true );
|
||||
addProjectAlias( "inceptionYear", true );
|
||||
addProjectAlias( "url", true );
|
||||
addProjectAlias( "parent", false );
|
||||
addProjectAlias( "prerequisites", false );
|
||||
addProjectAlias( "organization", false );
|
||||
addProjectAlias( "build", false );
|
||||
addProjectAlias( "reporting", false );
|
||||
addProjectAlias( "scm", false );
|
||||
addProjectAlias( "distributionManagement", false );
|
||||
addProjectAlias( "issueManagement", false );
|
||||
addProjectAlias( "ciManagement", false );
|
||||
}
|
||||
|
||||
private static void interpolateModelProperties(List<ModelProperty> modelProperties,
|
||||
List<InterpolatorProperty> interpolatorProperties,
|
||||
PomClassicDomainModel domainModel)
|
||||
throws IOException
|
||||
{
|
||||
if(!containsProjectVersion(interpolatorProperties))
|
||||
{
|
||||
aliases.put("\\$\\{project.version\\}", "\\$\\{version\\}");
|
||||
}
|
||||
|
||||
List<ModelProperty> firstPassModelProperties = new ArrayList<ModelProperty>();
|
||||
List<ModelProperty> secondPassModelProperties = new ArrayList<ModelProperty>();
|
||||
|
||||
ModelProperty buildProperty = new ModelProperty(ProjectUri.Build.xUri, null);
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if( mp.getValue() != null && !mp.getUri().contains( "#property" ) && !mp.getUri().contains( "#collection" ))
|
||||
{
|
||||
if( !buildProperty.isParentOf( mp ) || mp.getUri().equals(ProjectUri.Build.finalName ) )
|
||||
{
|
||||
firstPassModelProperties.add(mp);
|
||||
}
|
||||
else
|
||||
{
|
||||
secondPassModelProperties.add(mp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<InterpolatorProperty> standardInterpolatorProperties = new ArrayList<InterpolatorProperty>();
|
||||
if(domainModel.isPomInBuild())
|
||||
{
|
||||
String basedir = domainModel.getProjectDirectory().getAbsolutePath();
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${project.basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${pom.basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
|
||||
}
|
||||
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue() != null )
|
||||
{
|
||||
String uri = mp.getUri();
|
||||
standardInterpolatorProperties.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
|
||||
uri.length() ) + "}", mp.getValue(), PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
|
||||
}
|
||||
}
|
||||
|
||||
//FIRST PASS - Withhold using build directories as interpolator properties
|
||||
List<InterpolatorProperty> ips1 = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips1.addAll(standardInterpolatorProperties);
|
||||
ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
Collections.sort(ips1, new Comparator<InterpolatorProperty>()
|
||||
{
|
||||
public int compare(InterpolatorProperty o, InterpolatorProperty o1) {
|
||||
return PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
|
||||
}
|
||||
});
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips1 );
|
||||
|
||||
//SECOND PASS - Set absolute paths on build directories
|
||||
if( domainModel.isPomInBuild() )
|
||||
{ String basedir = domainModel.getProjectDirectory().getAbsolutePath();
|
||||
Map<ModelProperty, ModelProperty> buildDirectories = new HashMap<ModelProperty, ModelProperty>();
|
||||
for(ModelProperty mp : secondPassModelProperties)
|
||||
{
|
||||
if(mp.getUri().equals( ProjectUri.Build.directory ))
|
||||
{
|
||||
File file = new File(mp.getResolvedValue());
|
||||
if( !file.isAbsolute() )
|
||||
{
|
||||
buildDirectories.put(mp, new ModelProperty(mp.getUri(), new File(basedir, file.getPath()).getAbsolutePath()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( Map.Entry<ModelProperty, ModelProperty> e : buildDirectories.entrySet() )
|
||||
{
|
||||
secondPassModelProperties.remove( e.getKey() );
|
||||
secondPassModelProperties.add(e.getValue() );
|
||||
}
|
||||
}
|
||||
|
||||
//THIRD PASS - Use build directories as interpolator properties
|
||||
List<InterpolatorProperty> ips2 = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips2.addAll(standardInterpolatorProperties);
|
||||
ips2.addAll(ModelTransformerContext.createInterpolatorProperties(secondPassModelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
ips2.addAll(interpolatorProperties);
|
||||
Collections.sort(ips2, new Comparator<InterpolatorProperty>()
|
||||
{
|
||||
public int compare(InterpolatorProperty o, InterpolatorProperty o1) {
|
||||
return PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
|
||||
}
|
||||
});
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips2 );
|
||||
ProjectBuilder.Interpolator.interpolateModelProperties( modelProperties, interpolatorProperties, (PomClassicDomainModel) domainModel);
|
||||
}
|
||||
|
||||
private static boolean hasExecutionId( ModelContainer executionContainer )
|
||||
|
|
|
@ -22,14 +22,13 @@ package org.apache.maven.project.builder;
|
|||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.ProjectBuilderConfiguration;
|
||||
import org.apache.maven.shared.model.ImportModel;
|
||||
import org.apache.maven.shared.model.InterpolatorProperty;
|
||||
import org.apache.maven.shared.model.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Provides services for building maven projects from models.
|
||||
|
@ -39,6 +38,7 @@ public interface ProjectBuilder
|
|||
|
||||
String ROLE = ProjectBuilder.class.getName();
|
||||
|
||||
|
||||
/**
|
||||
* Returns a maven project for the specified input stream.
|
||||
*
|
||||
|
@ -57,4 +57,207 @@ public interface ProjectBuilder
|
|||
ProjectBuilderConfiguration projectBuilderConfiguration )
|
||||
throws IOException;
|
||||
|
||||
|
||||
public static class Interpolator {
|
||||
|
||||
public static String interpolateXmlString( String xml, List<InterpolatorProperty> interpolatorProperties )
|
||||
throws IOException
|
||||
{
|
||||
List<ModelProperty> modelProperties =
|
||||
ModelMarshaller.marshallXmlToModelProperties( new ByteArrayInputStream(xml.getBytes()), ProjectUri.baseUri,
|
||||
PomTransformer.URIS );
|
||||
|
||||
Map<String, String> aliases = new HashMap<String, String>();
|
||||
aliases.put( "project.", "pom.");
|
||||
|
||||
List<InterpolatorProperty> ips = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips.addAll(ModelTransformerContext.createInterpolatorProperties(modelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue() != null )
|
||||
{
|
||||
String uri = mp.getUri();
|
||||
ips.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
|
||||
uri.length() ) + "}", mp.getValue() ) );
|
||||
}
|
||||
}
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips );
|
||||
return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
|
||||
}
|
||||
|
||||
public static String interpolateModelAsString(Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory)
|
||||
throws IOException
|
||||
{
|
||||
PomClassicDomainModel domainModel = new PomClassicDomainModel( model );
|
||||
domainModel.setProjectDirectory( projectDirectory );
|
||||
List<ModelProperty> modelProperties =
|
||||
ModelMarshaller.marshallXmlToModelProperties( domainModel.getInputStream(), ProjectUri.baseUri, PomTransformer.URIS );
|
||||
interpolateModelProperties( modelProperties, interpolatorProperties, domainModel);
|
||||
|
||||
return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
|
||||
}
|
||||
|
||||
public static Model interpolateModel(Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory)
|
||||
throws IOException
|
||||
{
|
||||
String pomXml = interpolateModelAsString( model, interpolatorProperties, projectDirectory );
|
||||
PomClassicDomainModel domainModel = new PomClassicDomainModel( new ByteArrayInputStream( pomXml.getBytes() ));
|
||||
return domainModel.getModel();
|
||||
}
|
||||
|
||||
private static final Map<String, String> aliases = new HashMap<String, String>();
|
||||
|
||||
private static void addProjectAlias( String element, boolean leaf )
|
||||
{
|
||||
String suffix = leaf ? "\\}" : "\\.";
|
||||
aliases.put( "\\$\\{project\\." + element + suffix, "\\$\\{" + element + suffix );
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
aliases.put( "\\$\\{project\\.", "\\$\\{pom\\.");
|
||||
addProjectAlias( "modelVersion", true );
|
||||
addProjectAlias( "groupId", true );
|
||||
addProjectAlias( "artifactId", true );
|
||||
addProjectAlias( "version", true );
|
||||
addProjectAlias( "packaging", true );
|
||||
addProjectAlias( "name", true );
|
||||
addProjectAlias( "description", true );
|
||||
addProjectAlias( "inceptionYear", true );
|
||||
addProjectAlias( "url", true );
|
||||
addProjectAlias( "parent", false );
|
||||
addProjectAlias( "prerequisites", false );
|
||||
addProjectAlias( "organization", false );
|
||||
addProjectAlias( "build", false );
|
||||
addProjectAlias( "reporting", false );
|
||||
addProjectAlias( "scm", false );
|
||||
addProjectAlias( "distributionManagement", false );
|
||||
addProjectAlias( "issueManagement", false );
|
||||
addProjectAlias( "ciManagement", false );
|
||||
}
|
||||
|
||||
public static void interpolateModelProperties(List<ModelProperty> modelProperties,
|
||||
List<InterpolatorProperty> interpolatorProperties,
|
||||
PomClassicDomainModel domainModel)
|
||||
throws IOException
|
||||
{
|
||||
if(!containsProjectVersion(interpolatorProperties))
|
||||
{
|
||||
aliases.put("\\$\\{project.version\\}", "\\$\\{version\\}");
|
||||
}
|
||||
|
||||
List<ModelProperty> firstPassModelProperties = new ArrayList<ModelProperty>();
|
||||
List<ModelProperty> secondPassModelProperties = new ArrayList<ModelProperty>();
|
||||
|
||||
ModelProperty buildProperty = new ModelProperty(ProjectUri.Build.xUri, null);
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if( mp.getValue() != null && !mp.getUri().contains( "#property" ) && !mp.getUri().contains( "#collection" ))
|
||||
{
|
||||
if( !buildProperty.isParentOf( mp ) || mp.getUri().equals(ProjectUri.Build.finalName ) )
|
||||
{
|
||||
firstPassModelProperties.add(mp);
|
||||
}
|
||||
else
|
||||
{
|
||||
secondPassModelProperties.add(mp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<InterpolatorProperty> standardInterpolatorProperties = new ArrayList<InterpolatorProperty>();
|
||||
if(domainModel.isPomInBuild())
|
||||
{
|
||||
String basedir = domainModel.getProjectDirectory().getAbsolutePath();
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${project.basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
standardInterpolatorProperties.add(new InterpolatorProperty("${pom.basedir}", basedir,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
|
||||
|
||||
}
|
||||
|
||||
for(ModelProperty mp : modelProperties)
|
||||
{
|
||||
if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue() != null )
|
||||
{
|
||||
String uri = mp.getUri();
|
||||
standardInterpolatorProperties.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
|
||||
uri.length() ) + "}", mp.getValue(), PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
|
||||
}
|
||||
}
|
||||
|
||||
//FIRST PASS - Withhold using build directories as interpolator properties
|
||||
List<InterpolatorProperty> ips1 = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips1.addAll(standardInterpolatorProperties);
|
||||
ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
Collections.sort(ips1, new Comparator<InterpolatorProperty>()
|
||||
{
|
||||
public int compare(InterpolatorProperty o, InterpolatorProperty o1) {
|
||||
return PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
|
||||
}
|
||||
});
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips1 );
|
||||
|
||||
//SECOND PASS - Set absolute paths on build directories
|
||||
if( domainModel.isPomInBuild() )
|
||||
{ String basedir = domainModel.getProjectDirectory().getAbsolutePath();
|
||||
Map<ModelProperty, ModelProperty> buildDirectories = new HashMap<ModelProperty, ModelProperty>();
|
||||
for(ModelProperty mp : secondPassModelProperties)
|
||||
{
|
||||
if(mp.getUri().equals( ProjectUri.Build.directory ))
|
||||
{
|
||||
File file = new File(mp.getResolvedValue());
|
||||
if( !file.isAbsolute() )
|
||||
{
|
||||
buildDirectories.put(mp, new ModelProperty(mp.getUri(), new File(basedir, file.getPath()).getAbsolutePath()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( Map.Entry<ModelProperty, ModelProperty> e : buildDirectories.entrySet() )
|
||||
{
|
||||
secondPassModelProperties.remove( e.getKey() );
|
||||
secondPassModelProperties.add(e.getValue() );
|
||||
}
|
||||
}
|
||||
|
||||
//THIRD PASS - Use build directories as interpolator properties
|
||||
List<InterpolatorProperty> ips2 = new ArrayList<InterpolatorProperty>(interpolatorProperties);
|
||||
ips2.addAll(standardInterpolatorProperties);
|
||||
ips2.addAll(ModelTransformerContext.createInterpolatorProperties(secondPassModelProperties, ProjectUri.baseUri, aliases,
|
||||
PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
|
||||
ips2.addAll(interpolatorProperties);
|
||||
Collections.sort(ips2, new Comparator<InterpolatorProperty>()
|
||||
{
|
||||
public int compare(InterpolatorProperty o, InterpolatorProperty o1) {
|
||||
return PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
|
||||
}
|
||||
});
|
||||
|
||||
ModelTransformerContext.interpolateModelProperties( modelProperties, ips2 );
|
||||
}
|
||||
|
||||
private static boolean containsProjectVersion( List<InterpolatorProperty> interpolatorProperties )
|
||||
{
|
||||
InterpolatorProperty versionInterpolatorProperty =
|
||||
new ModelProperty( ProjectUri.version, "").asInterpolatorProperty( ProjectUri.baseUri);
|
||||
for( InterpolatorProperty ip : interpolatorProperties)
|
||||
{
|
||||
if ( ip.equals( versionInterpolatorProperty ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue