Подтвердить что ты не робот

Multi module POM - создание сайта, который работает

У меня есть приложение с несколькими модулями, и я пытаюсь создать сайт maven для этого приложения.

У меня есть агрегирующий POM, который содержит все дочерние модули, POM наследования, который содержит все общие функции для дочерних модулей и 20 дочерних модулей.

Я прошел через бесконечные онлайн-примеры того, как заставить это работать. Ни в одном из них не работает многомодульная часть этой работы. Я могу получить вывод отдельного сайта в формате OK, в целевой/дочерней папке дочерних элементов (и агрегационного модуля). Кроме того, Ive также размещал его в целевой/промежуточной папке в агрегирующей POM. Созданный материал выглядит хорошо.

Но

Ни одна из дочерних модулей не работает.

Ive попробовал запустить это на пристани, так как некоторые комментарии по этой проблеме говорят, что ссылки работают только тогда, когда они построены как веб-сайт - но нет, одна и та же проблема, она не может найти index.html дочернего элемента.

Есть ли у кого-нибудь пример этого? И чтобы я не вырвал больше волос (бог знает, что он там бежит, как есть). Идентификатор скорее увидит фактический рабочий код POM и/или этапы, необходимые для правильного тестирования и развертывания.

Может ли кто-нибудь помочь?

4b9b3361

Ответ 1

ОК, наконец, это получилось.

Добавьте это (только) в родительский POM, при необходимости изменив папку подстановки:

      <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-site-plugin</artifactId>
             <version>3.0</version>
             <configuration>
                 <stagingDirectory>C:\temp\stage</stagingDirectory>
                 <reportPlugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-project-info-reports-plugin</artifactId>
                         <version>2.4</version>
                     </plugin>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-javadoc-plugin</artifactId>
                         <version>2.8</version>
                         <configuration></configuration>
                         <reportSets>
                             <reportSet>
                                 <id>non-aggregate</id>
                                 <configuration>
                                     <!-- Specific configuration for the aggregate report -->
                                     <sourcepath>${project.build.sourceDirectory}/../generated</sourcepath>
                                 </configuration>
                                 <reports>
                                     <report>javadoc</report>
                                 </reports>
                             </reportSet>
                             <reportSet>
                                 <id>aggregate</id>
                                 <configuration>
                                     <!-- Specific configuration for the aggregate report -->
                                     <sourcepath>${project.build.sourceDirectory}/../generated</sourcepath>
                                 </configuration>
                                 <reports>
                                     <report>aggregate</report>
                                 </reports>
                             </reportSet>
                         </reportSets>
                     </plugin>
                        <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-report-plugin</artifactId>
                         <version>2.6</version>
                     </plugin>
                   </reportPlugins>
             </configuration>
         </plugin>

Добавьте это в раздел управления распределением родителя:

  <site>
       <id>${project.artifactId}-site</id>
       <url>./</url>
     </site>

Затем запустите

mvn site

mvn site: stage

Это должно быть развернуто в temp/site с рабочими ссылками.

Ответ 2

Я нашел "более простое" решение для настройки цели этапа. Он автоматически агрегирует документацию каждого модуля в папке ${project.baseURI}/target/stagging. Хитрость заключается в том, чтобы добавить это в родительский pom всех подмодулей:

  <distributionManagement>
     <site>
        <id>${project.artifactId}-site</id>
        <url>${project.baseUri}</url>
     </site>
  </distributionManagement>

Запустите mvn чистый сайт сайта: ступень от aggreator pom Затем загляните в папку "target/stagging". Документация по подмодулям будет правильно связана!

Надеюсь, он улучшит ваше создание сайта!

Ответ 3

Это уже через год после последнего решения.

Мне не понравилось это обходное решение, должно быть другое решение "путь maven".

Итак, вот оно:

В Maven Site Plugin FAQ: http://maven.apache.org/plugins/maven-site-plugin/faq.html#Use_of_url

"С другой стороны, он используется в многомодульной сборке для построения относительных ссылок [...]. В сборке нескольких модулей важно, чтобы родительский и дочерний модули имели разные URL-адреса."

Вы должны объявить <distributionManagement> тега в каждом pom.xml с разными URL-адресами:

Родительский POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/</url>
  </site>
</distributionManagement>

Child One POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/one/</url>
  </site>
</distributionManagement>

Child Two POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/two/</url>
  </site>
</distributionManagement>

Теперь генерация сайта и работа поэтапного выполнения выполняются по запросу. Поэтапный сайт создается в parent/target/staging

Вы можете отправить другой промежуточный каталог с -D

mvn -DstagingDirectory=D:/Temp/Site package site site:stage

Примечание: требуется пакет цели, если дочерний элемент имеет дочернюю роль в качестве зависимости. С пакетом сайт цели выполняется без ошибки, что в репозитории отсутствует зависимость.

Изменить: необходимо указать <url> для каждого артефакта, который использует те же шаблоны, что и в <distributionManagement> . Это связано с тем, что index.html, сгенерированный с помощью плагина report-info, использует <url> для вычисления относительных патчей, но сайт: stage использует <distributionManagement> .

Ответ 4

Детские ссылки не будут работать в вашем текущем проекте, вам нужно сделать сайт: этап, иначе это не сработает. Вам необходимо определить stagingDirectory, который определяет целевое местоположение, которое должно быть абсолютным путем.

Ответ 5

Это не работает точно так, как вы думаете. Это описано в Почему не работают ссылки между родительским и дочерним модулями при запуске "mvn-сайта" ? FAQ.

Я не эксперт в Maven, но вот как я создал сайт для локального создания:

  • Настройте <site> в корневом POM   

    <distributionManagement>
        <site>
            <id>internal.repo</id>
            <name>Temporary Staging Repository</name>
            <url>file://${project.build.directory}/mvn-repo</url>
        </site>
    </distributionManagement>
    
  • Создайте сайт для своего проекта

    mvn site
    
  • Создайте локальный веб-сайт . Это "Развертывает сгенерированный сайт в локальный каталог или макет на основе URL-адреса сайта, указанного в разделе POM".

    mvn site:stage
    
  • По умолчанию сайт будет создан под каталогом ${project.build.directory}/staging

Ответ 6

У меня есть аналогичный случай с OP, с завихрением: один из дочерних модулей не наследуется от многомодульного родителя проекта. Я хотел создать поэтапный сайт, на котором все ссылки работали правильно. Здесь структура проекта:

extraParent     // parent not part of this multi-module build
foo
  pom.xml       // aggregator
  fooParent     // parent for this project
  module1       // inherits from fooParent
  extraModule   // inherits from extraParent

@Stefan ответ был отличным шагом в правильном направлении. В частности, я подтвердил, что дочерние модули ДОЛЖНЫ повторять элементы distributionManagement и url. Я попробовал это в fooParent:

<properties>
  <foo.site.url>file://somePath/foo/${project.artifactId}</foo.site.url>
</properties>

<url>${foo.site.url}</url>
<distributionManagement>
    <site>
        <id>site-docs</id>
        <url>${foo.site.url}</url>
    </site>
</distributionManagement>

Maven рассчитал правильные значения для foo.site.url в fooParent и module1: file://somePath/foo/fooParent и file://somePath/foo/module1 соответственно. Тем не менее, сайт верхнего уровня не содержит правильных ссылок на модуль 1, если точно одинаковые блоки url/distributionManagement не дублируются в дочернем элементе. Похоже, что генерация сайта проверяет унаследованную конфигурацию без учета фактических значений URL (даже если они отличаются в случае, описанном, когда я смотрю на эффективные POM). Я нашел это очень неинтуитивным.

Мне нужен еще один элемент конфигурации, чтобы сайт верхнего уровня правильно связал в extraModule: topSiteURL. Я добавил следующее в extraModule POM. Примечание. Я просто извлек базовую часть URL-адреса (включая каталог верхнего уровня) в значение topSiteURL, а затем использовал его в свойстве foo.site.url.

<properties>
  <topSiteURL>file://somePath/foo/</topSiteURL>
  <foo.site.url>${topSiteURL}/${project.artifactId}</foo.site.url>
</properties>

<url>${foo.site.url}</url>
<distributionManagement>
    <site>
        <id>site-docs</id>
        <url>${foo.site.url}</url>
    </site>
</distributionManagement>

Теперь, когда я создаю сайт для многомодульного проекта с mvn site site:stage, все ссылки работают.

Ответ 7

Некоторые указатели на потерянные. После запуска mvn site site:stage каталог site не будет содержать скомпилированный сайт, который будет находиться в каталоге staging. Согласно странице использования плагина сайта maven, состав не выполняется до тех пор, пока сайт не будет развернут. После этапа вы можете вызвать mvn site:deploy, чтобы скопировать составленный сайт в место, указанное в URL-адресе, указанном в дистрибутиве

<distributionManagement>
  <site>
    <id>website</id>
    <url>file://${project.build.directory}/completesite</url>
  </site>
</distributionManagement> 

В этом случае завершенный сайт окажется в каталоге completesite в каталоге сборки проекта (обычно в каталоге target).