diff --git a/its/core-it-suite/pom.xml b/its/core-it-suite/pom.xml index 926e116c43..f6e3a10d59 100644 --- a/its/core-it-suite/pom.xml +++ b/its/core-it-suite/pom.xml @@ -36,34 +36,34 @@ under the License. ${maven.home} - ${mavenHome} @@ -106,20 +106,20 @@ under the License. org.codehaus.plexus plexus-utils - 1.5.8 + 3.3.0 org.apache.maven.its maven-it-helper 2.1-SNAPSHOT - org.apache.maven.shared maven-verifier - @@ -158,6 +158,11 @@ under the License. 0.3.4 provided + + org.apache.maven + maven-repository-metadata + 3.6.3 + @@ -283,7 +288,7 @@ under the License. - maven.repo.local ${maven.repo.local} @@ -308,7 +313,7 @@ under the License. - maven.repo.local.layout ${maven.repo.local.layout} @@ -327,7 +332,7 @@ under the License. -Xmx384m -XX:MaxPermSize=192m - + embedded @@ -339,7 +344,7 @@ under the License. once ${surefireMemory} -Dcom.sun.management.jmxremote=true - false diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6754TimestampInMultimoduleProject.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6754TimestampInMultimoduleProject.java index 247050a983..3661e3e739 100644 --- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6754TimestampInMultimoduleProject.java +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6754TimestampInMultimoduleProject.java @@ -19,26 +19,25 @@ package org.apache.maven.it; * under the License. */ -import org.apache.maven.it.util.ResourceExtractor; - import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.List; import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import static java.util.Arrays.asList; +import org.apache.maven.artifact.repository.metadata.Metadata; +import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; +import org.apache.maven.it.util.ResourceExtractor; + +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; public class MavenITmng6754TimestampInMultimoduleProject extends AbstractMavenIntegrationTestCase { - private static final Pattern LAST_UPDATED_LINE = Pattern.compile( "(\\d*)" ); private static final String RESOURCE_PATH = "/mng-6754-version-timestamp-in-multimodule-build"; + private static final String VERSION = "1.0-SNAPSHOT"; public MavenITmng6754TimestampInMultimoduleProject() @@ -57,68 +56,163 @@ public class MavenITmng6754TimestampInMultimoduleProject verifier.deleteDirectory( "repo" ); verifier.deleteArtifacts ( "org.apache.maven.its.mng6754" ); verifier.addCliOption( "-Drepodir=" + remoteRepoDir ); - verifier.executeGoals( asList( "install", "deploy" ) ); + verifier.executeGoal( "deploy" ); verifier.verifyErrorFreeLog(); final Properties props = verifier.loadProperties( "target/timestamp.properties" ); + // Reference timestamp final String mavenBuildTimestamp = props.getProperty( "project.properties.timestamp" ); - final String parentLastUpdatedLocal = getLastUpdatedFromMetadata( getLocalMetadataPath( localRepoDir, "parent" ) ); - final String aLastUpdatedLocal = getLastUpdatedFromMetadata( getLocalMetadataPath( localRepoDir, "child-a" ) ); - final String bLastUpdatedLocal = getLastUpdatedFromMetadata( getLocalMetadataPath( localRepoDir, "child-b" ) ); + final Metadata parentMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "parent", null ) ); + final Metadata aMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "child-a", null ) ); + final Metadata bMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "child-b", null ) ); - final String parentLastUpdatedRemote = getLastUpdatedFromMetadata( getRemoteMetadataPath( remoteRepoDir, "parent" ) ); - final String aLastUpdatedRemote = getLastUpdatedFromMetadata( getRemoteMetadataPath( remoteRepoDir, "child-a" ) ); - final String bLastUpdatedRemote = getLastUpdatedFromMetadata( getRemoteMetadataPath( remoteRepoDir, "child-b" ) ); + final String parentLastUpdatedLocal = parentMetadataLocal.getVersioning().getLastUpdated(); + final String aLastUpdatedLocal = aMetadataLocal.getVersioning().getLastUpdated(); + final String bLastUpdatedLocal = bMetadataLocal.getVersioning().getLastUpdated(); - assertEquals( "Installed child modules should have equal lastUpdated in maven-metadata-local.xml", - aLastUpdatedLocal, bLastUpdatedLocal ); - assertEquals( "Installed parent module should have equal lastUpdated in maven-metadata-local.xml as their children", - aLastUpdatedLocal, parentLastUpdatedLocal ); - assertEquals( "Deployed child modules should have equal lastUpdated in maven-metadata.xml", - aLastUpdatedRemote, bLastUpdatedRemote ); - assertEquals( "Deployed parent module should have equal lastUpdated in maven-metadata.xml as their children", - aLastUpdatedRemote, parentLastUpdatedRemote ); - assertEquals( "Installed parent module should have equal lastUpdated as deployed counterparts", - parentLastUpdatedLocal, parentLastUpdatedRemote ); - assertEquals( "Installed child-a module should have equal lastUpdated as deployed counterparts", - aLastUpdatedLocal, aLastUpdatedRemote ); - assertEquals( "Installed child-b module should have equal lastUpdated as deployed counterparts", - bLastUpdatedLocal, bLastUpdatedRemote ); - assertEquals( "Installed parent module should have equal lastUpdated as the Maven build timestamp", - parentLastUpdatedLocal, mavenBuildTimestamp ); - assertEquals( "Deployed parent module should have equal lastUpdated as the Maven build timestamp", - parentLastUpdatedRemote, mavenBuildTimestamp ); + assertEquals ( "parent", "local", "lastUpdated", mavenBuildTimestamp, parentLastUpdatedLocal ); + assertEquals ( "child-a", "local", "lastUpdated", mavenBuildTimestamp, aLastUpdatedLocal ); + assertEquals ( "child-b", "local", "lastUpdated", mavenBuildTimestamp, bLastUpdatedLocal ); + + final Metadata parentVersionedMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "parent", VERSION ) ); + final Metadata aVersionedMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "child-a", VERSION ) ); + final Metadata bVersionedMetadataLocal = getMetadata( getLocalMetadataPath( localRepoDir, "child-b", VERSION ) ); + + final String parentVersionedLastUpdatedLocal = parentVersionedMetadataLocal.getVersioning().getLastUpdated(); + final String parentVersionedSnapshotVersionUpdatedLocal = parentVersionedMetadataLocal.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String aLastVersionedUpdatedLocal = aVersionedMetadataLocal.getVersioning().getLastUpdated(); + final String aVersionedSnapshotVersionUpdated1Local = aVersionedMetadataLocal.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String aVersionedSnapshotVersionUpdated2Local = aVersionedMetadataLocal.getVersioning().getSnapshotVersions().get( 1 ).getUpdated(); + final String bLastVersionedUpdatedLocal = bVersionedMetadataLocal.getVersioning().getLastUpdated(); + final String bVersionedSnapshotVersionUpdated1Local = bVersionedMetadataLocal.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String bVersionedSnapshotVersionUpdated2Local = bVersionedMetadataLocal.getVersioning().getSnapshotVersions().get( 1 ).getUpdated(); + + assertEquals ( "parent", "local", "lastUpdated", mavenBuildTimestamp, parentVersionedLastUpdatedLocal ); + assertEquals ( "parent", "local", "snapshotVersion[0]/updated", mavenBuildTimestamp, parentVersionedSnapshotVersionUpdatedLocal ); + assertEquals ( "child-a", "local", "lastUpdated", mavenBuildTimestamp, aLastVersionedUpdatedLocal ); + assertEquals ( "child-a", "local", "snapshotVersion[0]/updated", mavenBuildTimestamp, aVersionedSnapshotVersionUpdated1Local ); + assertEquals ( "child-a", "local", "snapshotVersion[1]/updated", mavenBuildTimestamp, aVersionedSnapshotVersionUpdated2Local ); + assertEquals ( "child-b", "local", "lastUpdated", mavenBuildTimestamp, bLastVersionedUpdatedLocal ); + assertEquals ( "child-b", "local", "snapshotVersion[0]/updated", mavenBuildTimestamp, bVersionedSnapshotVersionUpdated1Local ); + assertEquals ( "child-b", "local", "snapshotVersion[1]/updated", mavenBuildTimestamp, bVersionedSnapshotVersionUpdated2Local ); + + final Metadata parentMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "parent", null ) ); + final Metadata aMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "child-a", null ) ); + final Metadata bMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "child-b", null ) ); + + final String parentLastUpdatedRemote = parentMetadataRemote.getVersioning().getLastUpdated(); + final String aLastUpdatedRemote = aMetadataRemote.getVersioning().getLastUpdated(); + final String bLastUpdatedRemote = bMetadataRemote.getVersioning().getLastUpdated(); + + assertEquals ( "parent", "remote", "lastUpdated", mavenBuildTimestamp, parentLastUpdatedRemote ); + assertEquals ( "child-a", "remote", "lastUpdated", mavenBuildTimestamp, aLastUpdatedRemote ); + assertEquals ( "child-b", "remote", "lastUpdated", mavenBuildTimestamp, bLastUpdatedRemote ); + + final Metadata parentVersionedMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "parent", VERSION ) ); + final Metadata aVersionedMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "child-a", VERSION ) ); + final Metadata bVersionedMetadataRemote = getMetadata( getRemoteMetadataPath( remoteRepoDir, "child-b", VERSION ) ); + + final String parentVersionedLastUpdatedRemote = parentVersionedMetadataRemote.getVersioning().getLastUpdated(); + final String parentVersionedSnapshotTimestamp = parentVersionedMetadataRemote.getVersioning().getSnapshot().getTimestamp().replace( ".", "" ); + final String parentVersionedSnapshotVersionUpdatedRemote = parentVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String parentVersionedSnapshotVersionValueRemote = parentVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getVersion(); + final String aLastVersionedUpdatedRemote = aVersionedMetadataRemote.getVersioning().getLastUpdated(); + final String aVersionedSnapshotTimestamp = aVersionedMetadataRemote.getVersioning().getSnapshot().getTimestamp().replace( ".", "" ); + final String aVersionedSnapshotVersionUpdated1Remote = aVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String aVersionedSnapshotVersionValue1Remote = aVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getVersion(); + final String aVersionedSnapshotVersionUpdated2Remote = aVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 1 ).getUpdated(); + final String aVersionedSnapshotVersionValue2Remote = aVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 1 ).getVersion(); + final String bLastVersionedUpdatedRemote = bVersionedMetadataRemote.getVersioning().getLastUpdated(); + final String bVersionedSnapshotTimestamp = bVersionedMetadataRemote.getVersioning().getSnapshot().getTimestamp().replace( ".", "" ); + final String bVersionedSnapshotVersionUpdated1Remote = bVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getUpdated(); + final String bVersionedSnapshotVersionValue1Remote = bVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 0 ).getVersion(); + final String bVersionedSnapshotVersionUpdated2Remote = bVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 1 ).getUpdated(); + final String bVersionedSnapshotVersionValue2Remote = bVersionedMetadataRemote.getVersioning().getSnapshotVersions().get( 1 ).getVersion(); + + assertEquals ( "parent", "remote", "lastUpdated", mavenBuildTimestamp, parentVersionedLastUpdatedRemote ); + assertEquals ( "parent", "remote", "snapshot/timestamp", mavenBuildTimestamp, parentVersionedSnapshotTimestamp ); + assertEquals ( "parent", "remote", "snapshotVersion[0]/updated", mavenBuildTimestamp, parentVersionedSnapshotVersionUpdatedRemote ); + assertEquals ( "parent", "remote", "snapshotVersion[0]/value", mavenBuildTimestamp, parentVersionedSnapshotVersionValueRemote.substring( 4, 19 ).replace( ".", "" ) ); + assertEquals ( "child-a", "remote", "lastUpdated", mavenBuildTimestamp, aLastVersionedUpdatedRemote ); + assertEquals ( "child-a", "remote", "snapshot/timestamp", mavenBuildTimestamp, aVersionedSnapshotTimestamp ); + assertEquals ( "child-a", "remote", "snapshotVersion[0]/updated", mavenBuildTimestamp, aVersionedSnapshotVersionUpdated1Remote ); + assertEquals ( "child-a", "remote", "snapshotVersion[0]/value", mavenBuildTimestamp, aVersionedSnapshotVersionValue1Remote.substring( 4, 19 ).replace( ".", "" ) ); + assertEquals ( "child-a", "remote", "snapshotVersion[1]/updated", mavenBuildTimestamp, aVersionedSnapshotVersionUpdated2Remote ); + assertEquals ( "child-a", "remote", "snapshotVersion[1]/value", mavenBuildTimestamp, aVersionedSnapshotVersionValue2Remote.substring( 4, 19 ).replace( ".", "" ) ); + assertEquals ( "child-b", "remote", "lastUpdated", mavenBuildTimestamp, bLastVersionedUpdatedRemote ); + assertEquals ( "child-b", "remote", "snapshot/timestamp", mavenBuildTimestamp, bVersionedSnapshotTimestamp ); + assertEquals ( "child-b", "remote", "snapshotVersion[0]/updated", mavenBuildTimestamp, bVersionedSnapshotVersionUpdated1Remote ); + assertEquals ( "child-b", "remote", "snapshotVersion[0]/value", mavenBuildTimestamp, bVersionedSnapshotVersionValue1Remote.substring( 4, 19 ).replace( ".", "" ) ); + assertEquals ( "child-b", "remote", "snapshotVersion[1]/updated", mavenBuildTimestamp, bVersionedSnapshotVersionUpdated2Remote ); + assertEquals ( "child-b", "remote", "snapshotVersion[1]/value", mavenBuildTimestamp, bVersionedSnapshotVersionValue2Remote.substring( 4, 19 ).replace( ".", "" ) ); + assertPathExists( remoteRepoDir, "parent", "remote", VERSION, "parent-" + parentVersionedSnapshotVersionValueRemote + ".pom" ); + assertPathExists( remoteRepoDir, "child-a", "remote", VERSION, "child-a-" + aVersionedSnapshotVersionValue1Remote + ".pom" ); + assertPathExists( remoteRepoDir, "child-a", "remote", VERSION, "child-a-" + aVersionedSnapshotVersionValue2Remote + ".jar" ); + assertPathExists( remoteRepoDir, "child-b", "remote", VERSION, "child-b-" + bVersionedSnapshotVersionValue1Remote + ".pom" ); + assertPathExists( remoteRepoDir, "child-b", "remote", VERSION, "child-b-" + bVersionedSnapshotVersionValue2Remote + ".jar" ); } - private Path getLocalMetadataPath( final Path repoDir, final String moduleName ) + private Path getLocalMetadataPath( final Path repoDir, final String moduleName, String version ) + { + return getRepoFile(repoDir, moduleName, version, "maven-metadata-local.xml" ); + } + + private Path getRemoteMetadataPath( final Path repoDir, final String moduleName, String version ) + { + return getRepoFile(repoDir, moduleName, version, "maven-metadata.xml" ); + } + + private Path getRepoFile( final Path repoDir, final String moduleName, String version, String fileName ) { final Path mng6754Path = Paths.get( "org", "apache", "maven", "its", "mng6754" ); - final Path modulePath = repoDir.resolve( mng6754Path.resolve( moduleName ) ); - return modulePath.resolve( "maven-metadata-local.xml" ); - } - - private Path getRemoteMetadataPath( final Path repoDir, final String moduleName ) - { - final Path mng6754Path = Paths.get( "org", "apache", "maven", "its", "mng6754" ); - final Path modulePath = repoDir.resolve( mng6754Path.resolve( moduleName ) ); - return modulePath.resolve( "maven-metadata.xml" ); - } - - private String getLastUpdatedFromMetadata( final Path metadataFile ) throws IOException - { - final List lines = Files.readAllLines( metadataFile, Charset.defaultCharset() ); - for (final String line : lines ) + Path modulePath = repoDir.resolve( mng6754Path.resolve( moduleName ) ); + if ( version != null ) { - final Matcher matcher = LAST_UPDATED_LINE.matcher( line ); - if ( matcher.find() ) - { - return matcher.group(1); - } + modulePath = modulePath.resolve( version ); } + return modulePath.resolve( fileName ); + } - // just in case, make sure the test will fail if there's no - // inside "maven-metadata.xml" - return ""; + private Metadata getMetadata( final Path metadataFile ) throws IOException, XmlPullParserException + { + MetadataXpp3Reader r = new MetadataXpp3Reader(); + try ( InputStream is = Files.newInputStream( metadataFile ) ) + { + return r.read( is ); + } + } + + private void assertEquals( String moduleName, String location, String field, String expected, String actual ) + { + String phase = null; + switch ( location ) + { + case "local": + phase = "Installed"; + break; + case "remote": + phase = "Deployed"; + break; + } + assertEquals( String.format( "%s %s module should have equal %s %s with the Maven build timestamp", + phase, moduleName, location, field ), expected, actual ); + } + + private void assertPathExists( Path repoDir, String moduleName, String location, String version, String fileName ) + { + String phase = null; + switch ( location ) + { + case "local": + phase = "Installed"; + break; + case "remote": + phase = "Deployed"; + break; + } + Path file = getRepoFile( repoDir, moduleName, version, fileName ); + assertTrue( String.format( "%s %s module %s file %s should exist", + phase, moduleName, location, file ), Files.exists( file ) ); } } diff --git a/its/core-it-suite/src/test/resources/bootstrap/group-10/pom.xml b/its/core-it-suite/src/test/resources/bootstrap/group-10/pom.xml index ba20245c87..042061be49 100644 --- a/its/core-it-suite/src/test/resources/bootstrap/group-10/pom.xml +++ b/its/core-it-suite/src/test/resources/bootstrap/group-10/pom.xml @@ -59,6 +59,11 @@ under the License. maven-resources-plugin 3.2.0 + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + org.apache.maven.plugins maven-surefire-plugin diff --git a/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-a/pom.xml b/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-a/pom.xml index d701abaa71..02ddb8d7c6 100644 --- a/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-a/pom.xml +++ b/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-a/pom.xml @@ -37,4 +37,13 @@ under the License. junit + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.0 + + + diff --git a/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-b/pom.xml b/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-b/pom.xml index bfc659f163..36772b6cfe 100644 --- a/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-b/pom.xml +++ b/its/core-it-suite/src/test/resources/mng-6754-version-timestamp-in-multimodule-build/child-b/pom.xml @@ -37,4 +37,13 @@ under the License. junit + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.0 + + +