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.interpolation.EnvarBasedValueSource;
24 import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
25 import org.codehaus.plexus.logging.AbstractLogEnabled;
26 import org.codehaus.plexus.util.IOUtil;
27 import org.codehaus.plexus.util.ReaderFactory;
28 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
29
30 import java.io.File;
31 import java.io.IOException;
32 import java.io.Reader;
33 import java.io.StringReader;
34 import java.io.StringWriter;
35
36 public class DefaultMavenProfilesBuilder
37 extends AbstractLogEnabled
38 implements MavenProfilesBuilder
39 {
40 private static final String PROFILES_XML_FILE = "profiles.xml";
41
42 public ProfilesRoot buildProfiles( File basedir )
43 throws IOException, XmlPullParserException
44 {
45 File profilesXml = new File( basedir, PROFILES_XML_FILE );
46
47 ProfilesRoot profilesRoot = null;
48
49 if ( profilesXml.exists() )
50 {
51 ProfilesXpp3Reader reader = new ProfilesXpp3Reader();
52 Reader profileReader = null;
53 try
54 {
55 profileReader = ReaderFactory.newXmlReader( profilesXml );
56
57 StringWriter sWriter = new StringWriter();
58
59 IOUtil.copy( profileReader, sWriter );
60
61 String rawInput = sWriter.toString();
62
63 try
64 {
65 RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
66 interpolator.addValueSource( new EnvarBasedValueSource() );
67
68 rawInput = interpolator.interpolate( rawInput, "settings" );
69 }
70 catch ( Exception e )
71 {
72 getLogger().warn( "Failed to initialize environment variable resolver. Skipping environment substitution in " + PROFILES_XML_FILE + "." );
73 getLogger().debug( "Failed to initialize envar resolver. Skipping resolution.", e );
74 }
75
76 StringReader sReader = new StringReader( rawInput );
77
78 profilesRoot = reader.read( sReader );
79 }
80 finally
81 {
82 IOUtil.close( profileReader );
83 }
84 }
85
86 return profilesRoot;
87 }
88
89 }