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 if ( simulate )
85 {
86 ReleaseResult result = new ReleaseResult();
87
88 logDebug( result, "Additional arguments: " + additionalArguments );
89
90 logInfo( result, "Executing perform goals - since this is simulation mode these goals are skipped." );
91
92 return result;
93 }
94
95 String workDir = releaseDescriptor.getWorkingDirectory();
96 if ( workDir == null )
97 {
98 workDir = System.getProperty( "user.dir" );
99 }
100
101
102 File pomFile = new File( workDir, pomFileName );
103 PomFinder pomFinder = new PomFinder( getLogger() );
104 boolean foundPom = false;
105
106 if ( StringUtils.isEmpty( releaseDescriptor.getScmRelativePathProjectDirectory() ) )
107 {
108 foundPom = pomFinder.parsePom( pomFile );
109 }
110
111 File workDirectory;
112 if ( simulate )
113 {
114 workDirectory = new File( releaseDescriptor.getWorkingDirectory() );
115 }
116 else
117 {
118 workDirectory = new File( releaseDescriptor.getCheckoutDirectory() );
119 }
120
121 if ( foundPom )
122 {
123 File matchingPom = pomFinder.findMatchingPom( workDirectory );
124 if ( matchingPom != null )
125 {
126 getLogger().info( "Invoking perform goals in directory " + matchingPom.getParent() );
127
128
129
130
131 workDirectory = matchingPom.getParentFile();
132 }
133 }
134
135 return execute( releaseDescriptor, releaseEnvironment, workDirectory, additionalArguments );
136 }
137
138 public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
139 List<MavenProject> reactorProjects )
140 throws ReleaseExecutionException
141 {
142 return runLogic( releaseDescriptor, releaseEnvironment, reactorProjects, true );
143 }
144
145 protected String getGoals( ReleaseDescriptor releaseDescriptor )
146 {
147 return releaseDescriptor.getPerformGoals();
148 }
149 }