1010import org .apache .maven .plugins .annotations .Parameter ;
1111import org .apache .maven .project .MavenProjectHelper ;
1212import org .codehaus .plexus .util .FileUtils ;
13- import org .eclipse .aether .DefaultRepositorySystemSession ;
1413import org .eclipse .aether .RepositorySystemSession ;
1514import org .eclipse .aether .artifact .DefaultArtifact ;
1615import org .eclipse .aether .impl .ArtifactResolver ;
17- import org .eclipse .aether .internal .impl .EnhancedLocalRepositoryManagerFactory ;
1816import org .eclipse .aether .repository .LocalRepository ;
1917import org .eclipse .aether .repository .RemoteRepository ;
20- import org .eclipse .aether .repository .RepositoryPolicy ;
2118import org .eclipse .aether .resolution .ArtifactRequest ;
2219import org .eclipse .aether .resolution .ArtifactResolutionException ;
2320import org .eclipse .aether .resolution .ArtifactResult ;
3128import java .io .InputStreamReader ;
3229import java .io .OutputStreamWriter ;
3330import java .io .PrintWriter ;
31+ import java .lang .reflect .Field ;
3432import java .nio .charset .Charset ;
3533import java .nio .file .Files ;
3634import java .util .ArrayList ;
@@ -57,10 +55,7 @@ public abstract class AbstractGitflowBasedRepositoryMojo extends AbstractGitflow
5755 protected String snapshotDeploymentRepository ;
5856
5957 @ Parameter (defaultValue = "${repositorySystemSession}" , required = true )
60- protected RepositorySystemSession session ;
61-
62- @ Component
63- protected EnhancedLocalRepositoryManagerFactory localRepositoryManagerFactory ;
58+ private RepositorySystemSession session ;
6459
6560 @ Parameter (defaultValue = "${project.build.directory}" , required = true )
6661 protected File buildDirectory ;
@@ -130,7 +125,7 @@ protected ArtifactRepository getDeploymentRepository(final String altRepository)
130125 * @throws MojoExecutionException
131126 * @throws MojoFailureException
132127 */
133- protected RemoteRepository getRepository (final String altRepository ) throws MojoExecutionException , MojoFailureException {
128+ private RemoteRepository getRepository (final String altRepository ) throws MojoExecutionException , MojoFailureException {
134129 if (getLog ().isDebugEnabled ()) {
135130 getLog ().debug ("Creating remote Aether repository (to resolve remote artifacts) for: " + altRepository );
136131 }
@@ -158,14 +153,15 @@ protected RemoteRepository getRepository(final String altRepository) throws Mojo
158153 }
159154
160155 private String getCoordinates (ArtifactResult result ) {
161- StringBuilder buffer = new StringBuilder (128 );
162- buffer .append (result .getArtifact ().getGroupId ());
163- buffer .append (':' ).append (result .getArtifact ().getArtifactId ());
164- buffer .append (':' ).append (result .getArtifact ().getExtension ());
165- if (result .getArtifact ().getClassifier ().length () > 0 ) {
166- buffer .append (':' ).append (result .getArtifact ().getClassifier ());
156+ StringBuilder buffer = new StringBuilder ( 128 );
157+ buffer .append ( result .getArtifact ().getGroupId () );
158+ buffer .append ( ':' ).append ( result .getArtifact ().getArtifactId () );
159+ buffer .append ( ':' ).append ( result .getArtifact ().getExtension () );
160+ if ( result .getArtifact ().getClassifier ().length () > 0 )
161+ {
162+ buffer .append ( ':' ).append ( result .getArtifact ().getClassifier () );
167163 }
168- buffer .append (':' ).append (result .getArtifact ().getBaseVersion ());
164+ buffer .append ( ':' ).append ( result .getArtifact ().getBaseVersion () );
169165 return buffer .toString ();
170166 }
171167
@@ -203,46 +199,47 @@ private String getCoordinates(org.apache.maven.artifact.Artifact artifact) {
203199 * group:artifact:type:classifier:version
204200 */
205201 protected void attachArtifactCatalog () throws MojoExecutionException {
206- getLog ().info ("Cataloging Artifacts for promotion & reattachment: " + project .getBuild ().getDirectory ());
202+ getLog ().info ("Cataloging Artifacts for promotion & reattachment: " + project .getBuild ().getDirectory ());
207203
208- File catalog = new File (buildDirectory , project .getArtifact ().getArtifactId () + ".txt" );
204+ File catalog = new File (buildDirectory , project .getArtifact ().getArtifactId () + ".txt" );
209205
210- PrintWriter writer = null ;
206+ PrintWriter writer = null ;
211207
212- try {
213- catalog .delete ();
214- buildDirectory .mkdirs ();
215- writer = new PrintWriter (new OutputStreamWriter (new FileOutputStream (catalog ), Charset .forName ("UTF-8" )));
216-
217- if (project .getArtifact () != null && project .getArtifact ().getFile () != null &&
218- project .getArtifact ().getFile ().exists () && !project .getArtifact ().getFile ().isDirectory ()) {
219- String coords = getCoordinates (project .getArtifact ());
220- if (!coords .isEmpty ()) {
221- getLog ().info ("Cataloging: " + coords );
222- writer .println (coords );
208+ try {
209+ catalog .delete ();
210+ buildDirectory .mkdirs ();
211+ writer = new PrintWriter (new OutputStreamWriter (new FileOutputStream (catalog ), Charset .forName ("UTF-8" )));
212+
213+ if (project .getArtifact () != null && project .getArtifact ().getFile () != null &&
214+ project .getArtifact ().getFile ().exists () && !project .getArtifact ().getFile ().isDirectory ())
215+ {
216+ String coords = getCoordinates (project .getArtifact ());
217+ if (!coords .isEmpty ()){
218+ getLog ().info ("Cataloging: " + coords );
219+ writer .println (coords );
220+ }
221+ } else {
222+ getLog ().info ("No primary artifact to catalog, cataloging attached artifacts instead." );
223223 }
224- } else {
225- getLog ().info ("No primary artifact to catalog, cataloging attached artifacts instead." );
226- }
227224
228- // Iterate the attached artifacts.
229- for (org .apache .maven .artifact .Artifact artifact : project .getAttachedArtifacts ()) {
230- String coords = getCoordinates (artifact );
231- if (!coords .isEmpty ()) {
232- getLog ().info ("Cataloging: " + coords );
233- writer .println (coords );
225+ // Iterate the attached artifacts.
226+ for (org .apache .maven .artifact .Artifact artifact : project .getAttachedArtifacts ()) {
227+ String coords = getCoordinates (artifact );
228+ if (!coords .isEmpty ()) {
229+ getLog ().info ("Cataloging: " + coords );
230+ writer .println (coords );
231+ }
234232 }
235- }
236233
237- getLog ().info ("Attaching catalog artifact: " + catalog );
238- projectHelper .attachArtifact (project , "txt" , "catalog" , catalog );
239- } catch (IOException ioe ) {
240- throw new MojoExecutionException ("Failed to create catalog of artifacts" , ioe );
241- } finally {
242- if (writer != null ) {
243- writer .close ();
234+ getLog ().info ("Attaching catalog artifact: " + catalog );
235+ projectHelper .attachArtifact (project , "txt" , "catalog" , catalog );
236+ } catch (IOException ioe ) {
237+ throw new MojoExecutionException ("Failed to create catalog of artifacts" , ioe );
238+ } finally {
239+ if (writer != null ) {
240+ writer .close ();
241+ }
244242 }
245- }
246243 }
247244
248245 /**
@@ -269,30 +266,35 @@ protected void attachExistingArtifacts(final String sourceRepository, final bool
269266 // A place to store our resolved files...
270267 List <ArtifactResult > resolvedArtifacts = new ArrayList <ArtifactResult >();
271268
269+ // Keep track of the original base directory.
270+ Field localBaseDir = null ;
271+ File originalBaseDir = session .getLocalRepositoryManager ().getRepository ().getBasedir ();
272272
273- // Use a custom repository session, setup to force a few behaviors we like.
274- DefaultRepositorySystemSession tempSession = new DefaultRepositorySystemSession (session );
275- tempSession .setUpdatePolicy (RepositoryPolicy .UPDATE_POLICY_ALWAYS );
276-
273+ // Disable the local repository - using a bit of reflection that I wish we didn't need to use.
277274 File tempRepo = null ;
278275 if (disableLocal ) {
279- getLog ().info ("Disabling local repository @ " + tempSession .getLocalRepository ().getBasedir ());
276+ getLog ().info ("Disabling local repository @ " + session .getLocalRepository ().getBasedir ());
280277 try {
278+ localBaseDir = LocalRepository .class .getDeclaredField ("basedir" );
279+ localBaseDir .setAccessible (true );
280+
281+ // Generate a new temp directory.
281282 tempRepo = Files .createTempDirectory ("gitflow-helper-maven-plugin-repo" ).toFile ();
282283
283284 getLog ().info ("Using temporary local repository @ " + tempRepo .getAbsolutePath ());
284- tempSession . setLocalRepositoryManager ( localRepositoryManagerFactory . newInstance ( tempSession , new LocalRepository ( tempRepo )) );
285+ localBaseDir . set ( session . getLocalRepositoryManager (). getRepository (), tempRepo );
285286 } catch (Exception ex ) {
286287 getLog ().warn ("Failed to disable local repository path." , ex );
287288 }
288289 }
289290
291+
290292 List <ArtifactRequest > requiredArtifacts = new ArrayList <ArtifactRequest >();
291293
292294 // Locate our text catalog classifier file. :-)
293295 BufferedReader reader = null ;
294296 try {
295- ArtifactResult catalogResult = artifactResolver .resolveArtifact (tempSession , new ArtifactRequest (new DefaultArtifact (project .getGroupId (), project .getArtifactId (), "catalog" , "txt" , project .getVersion ()), remoteRepositories , null ));
297+ ArtifactResult catalogResult = artifactResolver .resolveArtifact (session , new ArtifactRequest (new DefaultArtifact (project .getGroupId (), project .getArtifactId (), "catalog" , "txt" , project .getVersion ()), remoteRepositories , null ));
296298 resolvedArtifacts .add (catalogResult );
297299
298300 if (catalogResult .isResolved ()) {
@@ -315,15 +317,14 @@ protected void attachExistingArtifacts(final String sourceRepository, final bool
315317 if (reader != null ) {
316318 try {
317319 reader .close ();
318- } catch (IOException ioe ) {
319- }
320+ } catch (IOException ioe ) {}
320321 }
321322 }
322323
323324
324325 // Resolve the artifacts from the catalog (if there are any)
325326 try {
326- resolvedArtifacts .addAll (artifactResolver .resolveArtifacts (tempSession , requiredArtifacts ));
327+ resolvedArtifacts .addAll (artifactResolver .resolveArtifacts (session , requiredArtifacts ));
327328 } catch (ArtifactResolutionException are ) {
328329 throw new MojoExecutionException ("Failed to resolve the required project files from: " + sourceRepository , are );
329330 }
@@ -354,6 +355,12 @@ protected void attachExistingArtifacts(final String sourceRepository, final bool
354355
355356 // Restore the local repository, again using reflection.
356357 if (disableLocal ) {
358+ try {
359+ localBaseDir .set (session .getLocalRepositoryManager ().getRepository (), originalBaseDir );
360+ localBaseDir .setAccessible (false );
361+ } catch (Exception ex ) {
362+ getLog ().warn ("Failed to restore original local repository path." , ex );
363+ }
357364 if (tempRepo != null ) {
358365 try {
359366 FileUtils .deleteDirectory (tempRepo );
0 commit comments