diff --git a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java index 76e464a5..8ba018f8 100644 --- a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java +++ b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java @@ -1018,7 +1018,8 @@ private Map.Entry getSiteModel( MavenProject parentProject = project.getParent(); // 4. merge with parent project SiteModel - if (parentProject != null && (siteModel == null || siteModel.isMergeParent())) { + if (parentProject != null + && (siteModel == null || siteModel.isMergeParent() || siteModel.isEnforceParentDescriptor())) { depth++; LOGGER.debug("Looking for site descriptor of level " + depth + " parent project: " + parentProject.getId()); @@ -1038,6 +1039,12 @@ private Map.Entry getSiteModel( depth, parentSiteDirectory, locale, parentProject, repoSession, remoteProjectRepositories) .getKey(); + if (siteModel != null) { + if (siteModel.isEnforceParentDescriptor() && parentSiteModel == null) { + throw new SiteToolException("The site descriptor for '" + project.getId() + + "' requires a parent site descriptor for '" + parentProject.getId() + "'"); + } + } // MSHARED-116 requires site model (instead of a null one) // MSHARED-145 requires us to do this only if there is a parent to merge it with if (siteModel == null && parentSiteModel != null) { diff --git a/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java b/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java index c4dd00b2..bd9c11c7 100644 --- a/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java +++ b/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java @@ -19,7 +19,6 @@ package org.apache.maven.doxia.tools; import javax.inject.Inject; -import javax.inject.Named; import java.io.File; import java.io.StringReader; @@ -32,19 +31,15 @@ import java.util.List; import java.util.Locale; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; -import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.doxia.site.LinkItem; import org.apache.maven.doxia.site.SiteModel; import org.apache.maven.doxia.site.Skin; import org.apache.maven.doxia.site.io.xpp3.SiteXpp3Reader; import org.apache.maven.doxia.site.io.xpp3.SiteXpp3Writer; +import org.apache.maven.doxia.tools.stubs.MavenProjectStub; import org.apache.maven.doxia.tools.stubs.SiteToolMavenProjectStub; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.testing.PlexusTest; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -61,6 +56,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -70,46 +66,16 @@ @PlexusTest public class SiteToolTest { - @Inject - private PlexusContainer container; - - @Inject - private ArtifactRepositoryFactory artifactRepositoryFactory; - - @Inject - @Named("default") - private ArtifactRepositoryLayout defaultArtifactRepositoryLayout; - @Inject private DefaultSiteTool tool; - /** - * @return the repo. - * - * @throws Exception - */ - protected ArtifactRepository getLocalRepo() throws Exception { - String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS; - String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN; - ArtifactRepositoryPolicy snapshotsPolicy = - new ArtifactRepositoryPolicy(true, updatePolicyFlag, checksumPolicyFlag); - ArtifactRepositoryPolicy releasesPolicy = - new ArtifactRepositoryPolicy(true, updatePolicyFlag, checksumPolicyFlag); - return artifactRepositoryFactory.createArtifactRepository( - "local", - getTestFile("target/local-repo").toURI().toURL().toString(), - defaultArtifactRepositoryLayout, - snapshotsPolicy, - releasesPolicy); - } - /** * @return the local repo directory. * * @throws Exception */ protected File getLocalRepoDir() throws Exception { - return new File(getLocalRepo().getBasedir()); + return getTestFile("target/local-repo"); } protected RepositorySystemSession newRepoSession() throws Exception { @@ -567,6 +533,59 @@ public void testConvertOldToNewSiteModel() throws Exception { assertEquals(newModel, model); } + @Test + public void testEnforcedParentSiteDescriptor() throws SiteToolException, Exception { + assertNotNull(tool); + + SiteToolMavenProjectStub project = new SiteToolMavenProjectStub("enforce-parent-test"); + MavenProjectStub parentProject = new MavenProjectStub() { + @Override + public File getBasedir() { + return null; // this should be a non reactor/local project + } + }; + parentProject.setGroupId("org.apache.maven.shared.its"); + parentProject.setArtifactId("mshared-217-parent"); + parentProject.setVersion("1.0-SNAPSHOT"); + project.setParent(parentProject); + List reactorProjects = new ArrayList(); + + RepositorySystemSession repoSession = newRepoSession(); + // coordinates for site descriptor: ::xml:site: + new SiteToolMavenProjectStub("enforce-parent-test"); + org.eclipse.aether.artifact.Artifact parentArtifact = new org.eclipse.aether.artifact.DefaultArtifact( + "org.apache.maven.shared.its:mshared-217-parent:xml:site:1.0-SNAPSHOT"); + File parentArtifactInRepoFile = new File( + repoSession.getLocalRepository().getBasedir(), + repoSession.getLocalRepositoryManager().getPathForLocalArtifact(parentArtifact)); + + // model from current local build + assertThrows( + SiteToolException.class, + () -> tool.getSiteModel( + new File(project.getBasedir(), "src/site"), + SiteTool.DEFAULT_LOCALE, + project, + reactorProjects, + repoSession, + project.getRemoteProjectRepositories())); + + // now copy parent site descriptor to repo + FileUtils.copyFile( + getTestFile("src/test/resources/unit/enforce-parent-test/parent-site.xml"), parentArtifactInRepoFile); + try { + tool.getSiteModel( + new File(project.getBasedir(), "src/site"), + SiteTool.DEFAULT_LOCALE, + project, + reactorProjects, + repoSession, + project.getRemoteProjectRepositories()); + } finally { + parentArtifactInRepoFile.delete(); + } + } + private void writeModel(SiteModel model, String to) throws Exception { Writer writer = WriterFactory.newXmlWriter(getTestFile("target/test-classes/" + to)); try { diff --git a/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/parent-site.xml b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/parent-site.xml new file mode 100644 index 00000000..f059a27b --- /dev/null +++ b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/parent-site.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/pom.xml b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/pom.xml new file mode 100644 index 00000000..89c1a8ac --- /dev/null +++ b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/pom.xml @@ -0,0 +1,43 @@ + + + + + 4.0.0 + + + org.apache.maven.shared + enforce-parent-parent-test + 1.0-SNAPSHOT + + enforce-parent-test + jar + + dummy + + + + junit + junit + 3.8.1 + test + + + diff --git a/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/src/site/site.xml b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/src/site/site.xml new file mode 100644 index 00000000..753f3842 --- /dev/null +++ b/doxia-integration-tools/src/test/resources/unit/enforce-parent-test/src/site/site.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/doxia-site-model/pom.xml b/doxia-site-model/pom.xml index 036596ca..1c7f1335 100644 --- a/doxia-site-model/pom.xml +++ b/doxia-site-model/pom.xml @@ -84,7 +84,7 @@ under the License. src/main/mdo/site.mdo - 2.0.0 + 2.1.0 diff --git a/doxia-site-model/src/main/mdo/site.mdo b/doxia-site-model/src/main/mdo/site.mdo index fc687427..46faf18c 100644 --- a/doxia-site-model/src/main/mdo/site.mdo +++ b/doxia-site-model/src/main/mdo/site.mdo @@ -66,6 +66,15 @@ under the License. String merge + + + enforceParentDescriptor + 2.1.0+ + boolean + false + bannerLeft Banner logo on the masthead of the site to the left.