2016-12-02 5 views
0

У меня есть многомодульный проект. В родительском pom (который не является агрегатором POM), я использую maven-javadoc-plugin. Он имеет два исполнения, как в фазе package, один для цели jar, так и один для цели aggregate-jar.Как сделать maven-javadoc-plugin генерировать несколько банок?

Это красиво генерирует полный агрегат Javadoc jar всех классов (не тестируемых) в сборке.

Что мне нужно, чтобы быть в состоянии сделать это генерировать TWO Javadoc банки, один точно так, как это теперь генерации, а другой, который охватывает ограниченный набор модулей, и, возможно, исключает отдельные пакеты или классы.

Я подумал, что это может потребовать добавления двух элементов «выполнения», как для задачи «агрегат-банку», так и с разными значениями конфигурации. Кажется, это ничего не делало. Он просто создал одно дерево Javadoc, для «всех» классов. Как мне это сделать?

Это была моя попытка сделать это случиться:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.10.4</version> 
      <configuration> 
       <additionalparam>-Xdoclint:none</additionalparam> 
      </configuration> 
      <executions> 
       <execution> 
        <id>module-javadoc-jar</id> 
        <phase>package</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <show>protected</show> 
         <detectLinks>true</detectLinks> 
        </configuration> 
       </execution> 
       <execution> 
        <id>aggregated-documentation-all</id> 
        <phase>package</phase> 
        <inherited>false</inherited> 
        <goals> 
         <goal>aggregate-jar</goal> 
        </goals> 
        <configuration> 
         <sourcepath> 
         ../something-api: 
         ../something-impl: 
         ../something-else-api: 
         ../something-else-impl: 
         </sourcepath> 
         <destDir>all</destDir> 
         <finalName>all</finalName> 
         <show>protected</show> 
         <detectLinks>true</detectLinks> 
        </configuration> 
       </execution> 
       <execution> 
        <id>aggregated-documentation-interface</id> 
        <phase>package</phase> 
        <inherited>false</inherited> 
        <goals> 
         <goal>aggregate-jar</goal> 
        </goals> 
        <configuration> 
         <sourcepath> 
         ../something-api: 
         ../something-else-api: 
         </sourcepath> 
         <destDir>interface</destDir> 
         <finalName>interface</finalName> 
         <show>protected</show> 
         <detectLinks>true</detectLinks> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

ответ

0

Вероятно, вы пропускаете важную роль там в <configuration> и то есть <classifier>

What is the purpose of Classifier tag in maven?

Так что ваши этапы выполнения будет работать только тонну

<configuration> 
    <classifier>aggregated-documentation-all</classifier> 
    .... 
</configuration> 
... 
... 
<configuration> 
    <classifier>aggregated-documentation-interface</classifier> 
    .... 
</configuration> 

Источник - Ant to Maven - multiple build targets ответ от @ Тим О'Брайен

Полезные Insights - Maven JAR plugin

Отказ - Why-you-shouldnt?

Edit1 - Заметили дальше от комментариев, что ваш ПОМ является агрегатором pom.xml в этом случае хотел бы предложить вам использовать -

<inherited>true</inherited> 

, а также сохранить точку указания другого <destDir> для различных executions, чтобы подтвердить, глядя на разные выходы.


Edit2 - Чтобы уточнить больше, используя пример. Для меня здесь работало редактирование родительских модулей pom.xml , чтобы включить приведенное ниже. Выполнение mvn clean install генерирует два различных /target папки для этого изменения, используя различные конфигурации, указанных в расстрелах -

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.10.4</version> 
      <configuration> 
       <additionalparam>-Xdoclint:none</additionalparam> 
      </configuration> 
      <executions> 
       <execution> 
        <!--This shall generate the package inside the /target folder of parent module--> 
        <id>first</id> 
        <phase>package</phase> 
        <inherited>true</inherited> 
        <goals> 
         <goal>aggregate-jar</goal> 
        </goals> 
        <configuration> 
         <classifier>first</classifier> 
         <show>protected</show> 
         <detectLinks>true</detectLinks> 
        </configuration> 
       </execution> 
       <execution> 
        <!--This shall generate the /target on project.basedir of your project--> 
        <id>second</id> 
        <phase>package</phase> 
        <inherited>true</inherited> 
        <goals> 
         <goal>aggregate-jar</goal> 
        </goals> 
        <configuration> 
         <destDir>${project.basedir}</destDir> 
         <classifier>second</classifier> 
         <!--Notice the package in this /target would not include following packages--> 
         <excludePackageNames>com.xyz.in.my.project</excludePackageNames> 
         <finalName>second</finalName> 
         <show>protected</show> 
         <detectLinks>true</detectLinks> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

Спасибо за ответ, но это, казалось, не делает никакой разницы. Обратите внимание, что мой pom верхнего уровня является совокупным pom.Я определил плагин javadoc в родительском pom, который является одним из дочерних модулей. Все остальные дочерние модули определяют это как родительский pom. Я запускал «mvn install» на верхнем уровне, и он создал «target/* - javadoc.jar», который, как представляется, имеет javadoc для всех классов. Я не вижу никаких признаков какого-либо влияния на настройки классификатора. –

+0

@ Давид в порядке, вопрос читается * parent pom (который не является агрегатором POM) *. Также обратите внимание, если вы используете его как агрегатор POM, вы, вероятно, захотите указать ' true ' – nullpointer

+0

Я действительно смущен тем, что вы здесь говорите. Я был довольно ясен в оригинальной публикации, что у меня есть агрегатор pom И родительский pom, и мой параметр плагина javadoc находится в родительском pom. POM в верхнем каталоге представляет собой агрегатор pom, а один из детских помпов - родительский pom. –