1 package org.apache.maven.shared.release.phase;
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.project.MavenProject;
23 import org.apache.maven.shared.release.ReleaseExecutionException;
24 import org.apache.maven.shared.release.ReleaseResult;
25 import org.apache.maven.shared.release.config.ReleaseDescriptor;
26 import org.apache.maven.shared.release.env.ReleaseEnvironment;
27 import org.apache.maven.shared.release.util.PomFinder;
28 import org.codehaus.plexus.util.StringUtils;
29
30 import java.io.File;
31 import java.util.List;
32
33
34
35
36
37
38
39 public class RunPerformGoalsPhase
40 extends AbstractRunGoalsPhase
41 {
42 public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
43 List<MavenProject> reactorProjects )
44 throws ReleaseExecutionException
45 {
46 return runLogic( releaseDescriptor, releaseEnvironment, reactorProjects, false );
47 }
48
49 private ReleaseResult runLogic( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
50 List<MavenProject> reactorProjects, boolean simulate )
51 throws ReleaseExecutionException
52 {
53 String additionalArguments = releaseDescriptor.getAdditionalArguments();
54
55 if ( releaseDescriptor.isUseReleaseProfile() )
56 {
57 if ( !StringUtils.isEmpty( additionalArguments ) )
58 {
59 additionalArguments = additionalArguments + " -DperformRelease=true";
60 }
61 else
62 {
63 additionalArguments = "-DperformRelease=true";
64 }
65 }
66
67 String pomFileName = releaseDescriptor.getPomFileName();
68 if ( pomFileName == null )
69 {
70 pomFileName = "pom.xml";
71 }
72
73
74
75 if ( !StringUtils.isEmpty( additionalArguments ) )
76 {
77 additionalArguments = additionalArguments + " -f " + pomFileName;
78 }
79 else
80 {
81 additionalArguments = "-f " + pomFileName;
82 }
83
84 String workDir = releaseDescriptor.getWorkingDirectory();
85 if ( workDir == null )
86 {
87 workDir = System.getProperty( "user.dir" );
88 }
89
90
91 File pomFile = new File( workDir, pomFileName );
92 PomFinder pomFinder = new PomFinder( getLogger() );
93 boolean foundPom = false;
94
95 if ( StringUtils.isEmpty( releaseDescriptor.getScmRelativePathProjectDirectory() ) )
96 {
97 foundPom = pomFinder.parsePom( pomFile );
98 }
99
100 File workDirectory;
101 if ( simulate )
102 {
103 workDirectory = new File( releaseDescriptor.getWorkingDirectory() );
104 }
105 else
106 {
107 workDirectory = new File( releaseDescriptor.getCheckoutDirectory() );
108 }
109
110 if ( foundPom )
111 {
112 File matchingPom = pomFinder.findMatchingPom( workDirectory );
113 if ( matchingPom != null )
114 {
115 getLogger().info( "Invoking perform goals in directory " + matchingPom.getParent() );
116
117
118
119
120 workDirectory = matchingPom.getParentFile();
121 }
122 }
123
124 return execute( releaseDescriptor, releaseEnvironment, workDirectory, additionalArguments );
125 }
126
127 public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
128 List<MavenProject> reactorProjects )
129 throws ReleaseExecutionException
130 {
131 ReleaseResult result = new ReleaseResult();
132
133 logInfo( result, "Executing perform goals - since this is simulation mode these goals are skipped." );
134
135
136
137 return result;
138 }
139
140 protected String getGoals( ReleaseDescriptor releaseDescriptor )
141 {
142 return releaseDescriptor.getPerformGoals();
143 }
144 }