1 package org.apache.maven.profiles;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.profiles.io.xpp3.ProfilesXpp3Reader;
23 import org.codehaus.plexus.component.annotations.Component;
24 import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
25 import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
26 import org.codehaus.plexus.logging.AbstractLogEnabled;
27 import org.codehaus.plexus.util.IOUtil;
28 import org.codehaus.plexus.util.ReaderFactory;
29 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
30
31 import java.io.File;
32 import java.io.IOException;
33 import java.io.Reader;
34 import java.io.StringReader;
35 import java.io.StringWriter;
36
37 @Deprecated
38 @Component( role = MavenProfilesBuilder.class )
39 public class DefaultMavenProfilesBuilder
40 extends AbstractLogEnabled
41 implements MavenProfilesBuilder
42 {
43 private static final String PROFILES_XML_FILE = "profiles.xml";
44
45 public ProfilesRoot buildProfiles( File basedir )
46 throws IOException, XmlPullParserException
47 {
48 File profilesXml = new File( basedir, PROFILES_XML_FILE );
49
50 ProfilesRoot profilesRoot = null;
51
52 if ( profilesXml.exists() )
53 {
54 ProfilesXpp3Reader reader = new ProfilesXpp3Reader();
55 Reader profileReader = null;
56 try
57 {
58 profileReader = ReaderFactory.newXmlReader( profilesXml );
59
60 StringWriter sWriter = new StringWriter();
61
62 IOUtil.copy( profileReader, sWriter );
63
64 String rawInput = sWriter.toString();
65
66 try
67 {
68 RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
69 interpolator.addValueSource( new EnvarBasedValueSource() );
70
71 rawInput = interpolator.interpolate( rawInput, "settings" );
72 }
73 catch ( Exception e )
74 {
75 getLogger().warn( "Failed to initialize environment variable resolver. Skipping environment "
76 + "substitution in " + PROFILES_XML_FILE + "." );
77 getLogger().debug( "Failed to initialize envar resolver. Skipping resolution.", e );
78 }
79
80 StringReader sReader = new StringReader( rawInput );
81
82 profilesRoot = reader.read( sReader );
83 }
84 finally
85 {
86 IOUtil.close( profileReader );
87 }
88 }
89
90 return profilesRoot;
91 }
92
93 }