You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2009/02/28 17:01:20 UTC
svn commit: r748871 - in /maven/components/trunk/maven-project/src:
main/java/org/apache/maven/profiles/build/
main/java/org/apache/maven/profiles/injection/
main/java/org/apache/maven/project/
test/java/org/apache/maven/profiles/injection/ test/java/o...
Author: sisbell
Date: Sat Feb 28 16:01:20 2009
New Revision: 748871
URL: http://svn.apache.org/viewvc?rev=748871&view=rev
Log:
Got rid of the profile injector and advisor.
Removed:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/build/
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/injection/
maven/components/trunk/maven-project/src/test/java/org/apache/maven/profiles/injection/
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/injection/
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=748871&r1=748870&r2=748871&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Sat Feb 28 16:01:20 2009
@@ -22,6 +22,7 @@
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.lang.reflect.Method;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
@@ -37,9 +38,9 @@
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.profiles.DefaultProfileManager;
import org.apache.maven.profiles.activation.ProfileActivationContext;
import org.apache.maven.profiles.activation.ProfileActivationException;
-import org.apache.maven.profiles.build.ProfileAdvisor;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.builder.*;
import org.apache.maven.project.builder.profile.ProfileContext;
@@ -58,6 +59,9 @@
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.util.xml.pull.XmlSerializer;
+import org.codehaus.plexus.util.xml.pull.MXSerializer;
+import org.codehaus.plexus.PlexusContainer;
/**
@@ -71,10 +75,10 @@
private ModelValidator validator;
@Requirement
- private ProfileAdvisor profileAdvisor;
+ private MavenRepositorySystem repositorySystem;
@Requirement
- private MavenRepositorySystem repositorySystem;
+ private PlexusContainer container;
@Requirement
List<ModelEventListener> listeners;
@@ -306,15 +310,15 @@
String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
ProfileActivationContext profileActivationContext;
-
+
+ List<Profile> projectProfiles = new ArrayList<Profile>();
ProfileManager externalProfileManager = config.getGlobalProfileManager();
if ( externalProfileManager != null )
{
- // used to trigger the caching of SystemProperties in the container context...
try
{
- externalProfileManager.getActiveProfiles();
+ projectProfiles.addAll(externalProfileManager.getActiveProfiles( model ));
}
catch ( ProfileActivationException e )
{
@@ -326,13 +330,24 @@
else
{
profileActivationContext = new ProfileActivationContext( config.getExecutionProperties(), false );
- }
-
- List<Profile> projectProfiles = new ArrayList<Profile>();
- projectProfiles.addAll( profileAdvisor.applyActivatedProfiles( model, profileActivationContext ) );
+ ProfileManager profileManager = new DefaultProfileManager( container, profileActivationContext );
+ profileManager.addProfiles( model.getProfiles() );
+ try
+ {
+ projectProfiles.addAll( profileManager.getActiveProfiles( model ));
+ }
+ catch (ProfileActivationException e)
+ {
+ throw new ProjectBuildingException( projectId, "Failed to activate external profiles.",
+ projectDescriptor, e );
+ }
+ }
- projectProfiles.addAll( profileAdvisor.applyActivatedExternalProfiles( model, externalProfileManager ) );
+ for( Profile profile : projectProfiles )
+ {
+ inject( profile, model );
+ }
MavenProject project;
@@ -358,6 +373,89 @@
return project;
}
+ private Model inject( Profile profile, Model model )
+ {
+ //TODO: Using reflection now. Need to replace with custom mapper
+ StringWriter writer = new StringWriter();
+ XmlSerializer serializer = new MXSerializer();
+ serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
+ serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
+ try
+ {
+ serializer.setOutput( writer );
+ serializer.startDocument("UTF-8", null );
+ } catch (IOException e) {
+
+ }
+
+ try {
+ MavenXpp3Writer w = new MavenXpp3Writer();
+ Class c = Class.forName("org.apache.maven.model.io.xpp3.MavenXpp3Writer");
+
+ Class partypes[] = new Class[3];
+ partypes[0] = Profile.class;
+ partypes[1] = String.class;
+ partypes[2] = XmlSerializer.class;
+
+ Method meth = c.getDeclaredMethod(
+ "writeProfile", partypes);
+ meth.setAccessible(true);
+
+ Object arglist[] = new Object[3];
+ arglist[0] = profile;
+ arglist[1] = "profile";
+ arglist[2] = serializer;
+
+ meth.invoke(w, arglist);
+ serializer.endDocument();
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ Set<String> uris = new HashSet(PomTransformer.URIS);
+ uris.add(ProjectUri.Profiles.Profile.Build.Plugins.Plugin.configuration);
+
+ List<ModelProperty> p;
+ try
+ {
+ p = ModelMarshaller.marshallXmlToModelProperties(new ByteArrayInputStream(writer.getBuffer().toString().getBytes()),
+ ProjectUri.Profiles.xUri, uris);
+ } catch (IOException e) {
+ return null;
+ }
+
+ List<ModelProperty> transformed = new ArrayList<ModelProperty>();
+ for(ModelProperty mp : p)
+ {
+ if(mp.getUri().startsWith(ProjectUri.Profiles.Profile.xUri) && !mp.getUri().equals(ProjectUri.Profiles.Profile.id)
+ && !mp.getUri().startsWith(ProjectUri.Profiles.Profile.Activation.xUri) )
+ {
+ transformed.add(new ModelProperty(mp.getUri().replace(ProjectUri.Profiles.Profile.xUri, ProjectUri.xUri),
+ mp.getResolvedValue()));
+ }
+ }
+
+ PomTransformer transformer = new PomTransformer( new PomClassicDomainModelFactory() );
+ ModelTransformerContext ctx = new ModelTransformerContext(PomTransformer.MODEL_CONTAINER_INFOS );
+
+ PomClassicDomainModel transformedDomainModel;
+ try {
+ transformedDomainModel = ( (PomClassicDomainModel) ctx.transform( Arrays.asList( new PomClassicDomainModel(transformed), convertToDomainModel(model)),
+ transformer,
+ transformer,
+ Collections.EMPTY_LIST,
+ null,
+ null ) );
+ return convertFromInputStreamToModel(transformedDomainModel.getInputStream());
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+
+ }
+
private MavenProject readModelFromLocalPath( String projectId, File projectDescriptor, PomArtifactResolver resolver, ProjectBuilderConfiguration config )
throws ProjectBuildingException
{