1 package org.apache.maven.settings;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24
25 import org.apache.maven.execution.MavenExecutionRequest;
26 import org.apache.maven.properties.internal.SystemProperties;
27 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
28 import org.apache.maven.settings.building.SettingsBuilder;
29 import org.apache.maven.settings.building.SettingsBuildingException;
30 import org.apache.maven.settings.building.SettingsBuildingRequest;
31 import org.codehaus.plexus.component.annotations.Component;
32 import org.codehaus.plexus.component.annotations.Requirement;
33 import org.codehaus.plexus.logging.AbstractLogEnabled;
34 import org.codehaus.plexus.util.StringUtils;
35 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
36
37
38
39
40 @Component( role = MavenSettingsBuilder.class )
41 public class DefaultMavenSettingsBuilder
42 extends AbstractLogEnabled
43 implements MavenSettingsBuilder
44 {
45
46 @Requirement
47 private SettingsBuilder settingsBuilder;
48
49 public Settings buildSettings()
50 throws IOException, XmlPullParserException
51 {
52 File userSettingsFile =
53 getFile( "${user.home}/.m2/settings.xml", "user.home",
54 MavenSettingsBuilder.ALT_USER_SETTINGS_XML_LOCATION );
55
56 return buildSettings( userSettingsFile );
57 }
58
59 public Settings buildSettings( boolean useCachedSettings )
60 throws IOException, XmlPullParserException
61 {
62 return buildSettings();
63 }
64
65 public Settings buildSettings( File userSettingsFile )
66 throws IOException, XmlPullParserException
67 {
68 File globalSettingsFile =
69 getFile( "${maven.conf}/settings.xml", "maven.conf",
70 MavenSettingsBuilder.ALT_GLOBAL_SETTINGS_XML_LOCATION );
71
72 SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
73 request.setUserSettingsFile( userSettingsFile );
74 request.setGlobalSettingsFile( globalSettingsFile );
75 request.setSystemProperties( SystemProperties.getSystemProperties() );
76 return build( request );
77 }
78
79 public Settings buildSettings( File userSettingsFile, boolean useCachedSettings )
80 throws IOException, XmlPullParserException
81 {
82 return buildSettings( userSettingsFile );
83 }
84
85 private Settings build( SettingsBuildingRequest request )
86 throws IOException, XmlPullParserException
87 {
88 try
89 {
90 return settingsBuilder.build( request ).getEffectiveSettings();
91 }
92 catch ( SettingsBuildingException e )
93 {
94 throw (IOException) new IOException( e.getMessage() ).initCause( e );
95 }
96 }
97
98
99 public Settings buildSettings( MavenExecutionRequest request )
100 throws IOException, XmlPullParserException
101 {
102 SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
103 settingsRequest.setUserSettingsFile( request.getUserSettingsFile() );
104 settingsRequest.setGlobalSettingsFile( request.getGlobalSettingsFile() );
105 settingsRequest.setUserProperties( request.getUserProperties() );
106 settingsRequest.setSystemProperties( request.getSystemProperties() );
107
108 return build( settingsRequest );
109 }
110
111 private File getFile( String pathPattern, String basedirSysProp, String altLocationSysProp )
112 {
113
114
115
116
117
118
119
120
121
122
123
124
125
126 String path = System.getProperty( altLocationSysProp );
127
128 if ( StringUtils.isEmpty( path ) )
129 {
130
131
132 String basedir = System.getProperty( basedirSysProp );
133 if ( basedir == null )
134 {
135 basedir = System.getProperty( "user.dir" );
136 }
137
138 basedir = basedir.replaceAll( "\\\\", "/" );
139 basedir = basedir.replaceAll( "\\$", "\\\\\\$" );
140
141 path = pathPattern.replaceAll( "\\$\\{" + basedirSysProp + "\\}", basedir );
142 path = path.replaceAll( "\\\\", "/" );
143
144
145
146
147
148
149
150 return new File( path ).getAbsoluteFile();
151 }
152 else
153 {
154 return new File( path ).getAbsoluteFile();
155 }
156 }
157
158 }