o maven site para multi módulo
-
12-11-2019 - |
Pergunta
Eu tenho um projeto maven, com muitas sub-módulos, e eu uso o pai pom para controlar os plugins do diretório, como abaixo
-pom.xml (parent pom)
+- submodule1
+- submodule2
+- src\site\site.xml
portanto, src\site\site.xml
contém o menu personalizado, como abaixo
<project>
....
<body>
<menu name="Overview">
<item name="Introduction" href="introduction.html"/>
</menu>
<menu name="Development">
<item name="Getting started" href="designenv.html"/>
<item name="FAQ" href="designfaq.html" />
<item name="Javadoc" href="apidocs/index.html" />
</menu>
<menu ref="modules"/>
<menu ref="reports"/>
</body>
</project>
Após a execução mvn site:stage
na raiz (sugerido a partir de o maven site plugin), o pai de página da web é bom, enquanto o <sub-modules>\index.html
não contém qualquer menu (nenhum projeto info & relatório de projecto)
Também percebo que se eu executar mvn site
em sub-módulos, o index.html não contém nenhum menu na esquerda, enquanto o indivíduo html existem no diretório, como pmd.html, license.html
- Eu preciso adicionar
src\site\site.xml
em cada sub-módulo ou outra maneira melhor ? - ou eu Fiz algo estúpido na
pom.xml
em algum lugar ?
Alguma dica ?
[update] também como para a imagem do banner, se eu definir o pai como este
<bannerLeft>
<name>edcp</name>
<src>images/mylogo.png</src>
</bannerLeft>
O site para o sub-módulo com pontos para a direção errada, em html, parece ..\..\<submodule>
, não ..\images\mylogo.png
Solução
Se você gostaria de evitar copiar o site.xml para cada sub-módulo manualmente, em seguida, usando o o maven-resources-plugin poderia ser uma solução alternativa:Adicione isso ao seu pai pom:
[...]
<properties>
<site.basedir>${project.basedir}</site.basedir>
</properties>
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-sitedescriptor</id>
<!-- fetch site.xml before creating site documentation -->
<phase>pre-site</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/src/site/</outputDirectory>
<resources>
<resource>
<directory>${site.basedir}/src/site/</directory>
<includes>
<include>**/site.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
e isso para cada um dos seus sub-módulo poms:
<properties>
<site.basedir>${project.parent.basedir}</site.basedir>
</properties>
Em seguida, o site descritor será copiado a partir do projeto do pai para cada submódulo (substituindo existente descritores) antes de a documentação do site é criado.Por favor, note que o src/site diretório deve existir em cada sub-módulo para fazer este trabalho.Não é uma solução perfeita, mas talvez melhor do que um completo manual.
Outras dicas
É possível herdar menus do pai site.xml
usando o inherit
atributo.
E. g,
<project>
....
<body>
<menu name="Overview" inherit="top">
<item name="Introduction" href="introduction.html"/>
</menu>
<menu name="Development" inherit="top">
<item name="Getting started" href="designenv.html"/>
<item name="FAQ" href="designfaq.html" />
<item name="Javadoc" href="apidocs/index.html" />
</menu>
<menu ref="modules"/>
<menu ref="reports"/>
</body>
</project>
Agora, tanto o Overview
e Development
menus serão herdadas por todos os sub-projetos.
Veja o Maven documentação de multi-módulo de sites para mais detalhes, http://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html#Inheritance
Me deparei com este ao tentar gerar um multi módulo maven site e só queria compartilhar uma solução que eu encontrei.
Em seu parent pom adicionar
<siteDirectory>${session.executionRootDirectory}/src/site</siteDirectory>
para o maven site plugin de configuração.
Que deve informar a todos a criança poms para obter a sua site.xml a partir do diretório pai.
Eu estou usando um pequeno script em Python que cria todas as site.xml
arquivos a partir de um modelo. Aqui está a essência.