diff --git a/pom.xml b/pom.xml index c15364da..f28375c5 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,10 @@ flatten-maven-plugin maven-plugin Maven Flatten Plugin - 1.2.0-SNAPSHOT + + 1.1.0.2 Plugin to generate flattened POM (reduced and resolved information required for consumers of maven repositories) and to use (install, sign, deploy) it instead of original pom.xml. 2014 diff --git a/src/it/projects/complete-multimodule-parent-pom-cifriendly/pom.xml b/src/it/projects/complete-multimodule-parent-pom-cifriendly/pom.xml index 23605513..75f7baf6 100644 --- a/src/it/projects/complete-multimodule-parent-pom-cifriendly/pom.xml +++ b/src/it/projects/complete-multimodule-parent-pom-cifriendly/pom.xml @@ -16,6 +16,8 @@ flatten-maven-plugin resolveCiFriendliesOnly + @@ -100,6 +102,8 @@ 1.2.3.0 value + foo + bar @@ -114,4 +118,19 @@ http://mojo.codehaus.org + + + cifriendly-profile-bug + + true + + + + myrepo + myrepo + https://${repoHost}/${repoPath} + + + + \ No newline at end of file diff --git a/src/it/projects/complete-multimodule-parent-pom-cifriendly/verify.groovy b/src/it/projects/complete-multimodule-parent-pom-cifriendly/verify.groovy index a3e5a1eb..21cda792 100644 --- a/src/it/projects/complete-multimodule-parent-pom-cifriendly/verify.groovy +++ b/src/it/projects/complete-multimodule-parent-pom-cifriendly/verify.groovy @@ -82,3 +82,6 @@ assert 'org.codehaus.mojo.flatten.its' == flattendChildWithParentProject.groupId assert 'multimodule-module-with-parent-cifriendly' == flattendChildWithParentProject.artifactId.text() assert '1.2.3.4' == flattendChildWithParentProject.version.text() assert '1.2.3.4' == flattendChildWithParentProject.parent.version.text() + +// CiFriendly interpolation bug +assert 'https://${repoHost}/${repoPath}' == flattendProject.profiles.profile[0].repositories.repository[0].url.text() diff --git a/src/main/java/org/codehaus/mojo/flatten/ElementHandling.java b/src/main/java/org/codehaus/mojo/flatten/ElementHandling.java index be14b463..7933b6e4 100644 --- a/src/main/java/org/codehaus/mojo/flatten/ElementHandling.java +++ b/src/main/java/org/codehaus/mojo/flatten/ElementHandling.java @@ -47,6 +47,9 @@ public enum ElementHandling keep, /** Remove the element entirely so it will not be present in flattened POM. */ - remove + remove, + + /** Take the element untouched from the original POM. Fix for {@link #keep} */ + keepRaw } diff --git a/src/main/java/org/codehaus/mojo/flatten/FlattenDescriptor.java b/src/main/java/org/codehaus/mojo/flatten/FlattenDescriptor.java index faa8326e..f1860f74 100644 --- a/src/main/java/org/codehaus/mojo/flatten/FlattenDescriptor.java +++ b/src/main/java/org/codehaus/mojo/flatten/FlattenDescriptor.java @@ -316,6 +316,22 @@ public void setIssueManagement( ElementHandling issueManagement ) setHandling( PomProperty.ISSUE_MANAGEMENT, issueManagement ); } + /** + * @return {@link ElementHandling} for {@link Model#getLicenses() licenses}. + */ + public ElementHandling getLicenses() + { + return getHandling( PomProperty.LICENSES ); + } + + /** + * @param licenses the {@link #getLicenses() licenses} to set. + */ + public void setLicenses( ElementHandling licenses ) + { + setHandling( PomProperty.LICENSES, licenses ); + } + /** * @return {@link ElementHandling} for {@link Model#getCiManagement() ciManagement}. */ diff --git a/src/main/java/org/codehaus/mojo/flatten/FlattenMode.java b/src/main/java/org/codehaus/mojo/flatten/FlattenMode.java index 12750982..e8719359 100644 --- a/src/main/java/org/codehaus/mojo/flatten/FlattenMode.java +++ b/src/main/java/org/codehaus/mojo/flatten/FlattenMode.java @@ -77,8 +77,12 @@ public enum FlattenMode /** Only resolves variables revision, sha1 and changelist. Keeps everything else. * See Maven CI Friendly for further details. */ - resolveCiFriendliesOnly; + resolveCiFriendliesOnly, + /** + * Fix for {@link #resolveCiFriendliesOnly} + */ + version; /** * @return the {@link FlattenDescriptor} defined by this {@link FlattenMode}. @@ -147,6 +151,34 @@ public FlattenDescriptor getDescriptor() descriptor.setUrl( ElementHandling.interpolate ); descriptor.setVersion( ElementHandling.resolve ); break; + case version: + descriptor.setBuild(ElementHandling.keepRaw); + descriptor.setCiManagement(ElementHandling.keepRaw); + descriptor.setContributors(ElementHandling.keepRaw); + descriptor.setDependencies(ElementHandling.keepRaw); + descriptor.setDependencyManagement(ElementHandling.keepRaw); + descriptor.setDescription(ElementHandling.keepRaw); + descriptor.setDevelopers(ElementHandling.keepRaw); + descriptor.setDistributionManagement(ElementHandling.keepRaw); + descriptor.setInceptionYear(ElementHandling.keepRaw); + descriptor.setIssueManagement(ElementHandling.keepRaw); + descriptor.setLicenses(ElementHandling.keepRaw); + descriptor.setMailingLists(ElementHandling.keepRaw); + descriptor.setModules(ElementHandling.keepRaw); + descriptor.setName(ElementHandling.keepRaw); + descriptor.setOrganization(ElementHandling.keepRaw); + descriptor.setParent(ElementHandling.resolve); + descriptor.setPluginManagement(ElementHandling.keepRaw); + descriptor.setPluginRepositories(ElementHandling.keepRaw); + descriptor.setPrerequisites(ElementHandling.keepRaw); + descriptor.setProfiles(ElementHandling.keepRaw); + descriptor.setProperties(ElementHandling.keepRaw); + descriptor.setReporting(ElementHandling.keepRaw); + descriptor.setRepositories(ElementHandling.keepRaw); + descriptor.setScm(ElementHandling.keepRaw); + descriptor.setUrl(ElementHandling.keepRaw); + descriptor.setVersion(ElementHandling.resolve); + break; case clean: // nothing to do... break; diff --git a/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java b/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java index eeb669b6..60576972 100644 --- a/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java +++ b/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java @@ -38,6 +38,7 @@ import org.apache.maven.model.building.ModelBuildingResult; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.interpolation.ModelInterpolator; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.model.io.xpp3.MavenXpp3Writer; import org.apache.maven.model.profile.ProfileActivationContext; import org.apache.maven.model.profile.ProfileInjector; @@ -57,6 +58,7 @@ import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.ext.DefaultHandler2; @@ -65,6 +67,7 @@ import javax.xml.parsers.SAXParserFactory; import java.io.File; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -486,6 +489,7 @@ protected Model createFlattenedPom( File pomFile ) Model originalPom = this.project.getOriginalModel(); Model resolvedPom = this.project.getModel(); Model interpolatedPom = createResolvedPom( buildingRequest ); + Model rawPom = getRawPom(pomFile); // copy the configured additional POM elements... @@ -494,7 +498,7 @@ protected Model createFlattenedPom( File pomFile ) if ( property.isElement() ) { Model sourceModel = getSourceModel( descriptor, property, effectivePom, originalPom, resolvedPom, - interpolatedPom, cleanPom ); + interpolatedPom, cleanPom, rawPom ); if ( sourceModel == null ) { if ( property.isRequired() ) @@ -513,6 +517,20 @@ protected Model createFlattenedPom( File pomFile ) return flattenedPom; } + private Model getRawPom(File pomFile) throws MojoExecutionException + { + MavenXpp3Reader reader = new MavenXpp3Reader(); + Model rawPom = null; + try + { + rawPom = reader.read(new FileReader(pomFile)); + } + catch(IOException | XmlPullParserException e) { + throw new MojoExecutionException("Error reading raw model.", e); + } + return rawPom; + } + private Model createResolvedPom( ModelBuildingRequest buildingRequest ) { LoggingModelProblemCollector problems = new LoggingModelProblemCollector( getLog() ); @@ -593,7 +611,8 @@ protected Model createCleanPom( Model effectivePom ) } private Model getSourceModel( FlattenDescriptor descriptor, PomProperty property, Model effectivePom, - Model originalPom, Model resolvedPom, Model interpolatedPom, Model cleanPom ) + Model originalPom, Model resolvedPom, Model interpolatedPom, Model cleanPom, + Model rawPom ) { ElementHandling handling = descriptor.getHandling( property ); @@ -613,6 +632,8 @@ private Model getSourceModel( FlattenDescriptor descriptor, PomProperty prope return cleanPom; case remove: return null; + case keepRaw: + return rawPom; default: throw new IllegalStateException( handling.toString() ); }