77
88import java .util .ArrayList ;
99import java .util .Collection ;
10+ import java .util .Comparator ;
1011import java .util .stream .Collectors ;
1112import java .util .stream .Stream ;
1213
@@ -34,6 +35,30 @@ public void setUpSession(Collection<MavenProject> changedProjects) {
3435 final Collection <MavenProject > changed = new ArrayList <>(changedProjects );
3536 changed .addAll (configuration .ignoredProjects );
3637 changed .addAll (configuration .buildAnywaysProjects );
38+
39+ Comparator <MavenProject > comparator ;
40+ if (configuration .buildChangedFirst )
41+ {
42+ logger .info ("Sorting reactor so changed project are built first." );
43+
44+ comparator = (project1 , project2 ) -> {
45+ if (changedProjects .contains (project1 )
46+ && changedProjects .contains (project2 ))
47+ // both projects are changed, keep order
48+ return 0 ;
49+
50+ if (changedProjects .contains (project1 ))
51+ return -1 ;
52+ if (changedProjects .contains (project2 ))
53+ return 1 ;
54+
55+ return 0 ;
56+ };
57+ } else {
58+ // do not reshuffle projects
59+ comparator = (project1 , project2 ) -> 0 ;
60+ }
61+
3762 if (!configuration .buildAll ) {
3863 Collection <MavenProject > rebuildProjects = changed ;
3964 if (configuration .makeUpstream ) {
@@ -47,6 +72,7 @@ public void setUpSession(Collection<MavenProject> changedProjects) {
4772 } else {
4873 mavenSession .setProjects (mavenSession .getProjects ().stream ()
4974 .filter (rebuildProjects ::contains )
75+ .sorted (comparator )
5076 .collect (Collectors .toList ()));
5177 }
5278 } else {
@@ -56,6 +82,10 @@ public void setUpSession(Collection<MavenProject> changedProjects) {
5682 this .ifSkipDependenciesTest (p );
5783 this .ifSkipDependenciesSonar (p );
5884 });
85+
86+ mavenSession .setProjects (mavenSession .getProjects ().stream ()
87+ .sorted (comparator )
88+ .collect (Collectors .toList ()));
5989 }
6090 }
6191
0 commit comments